Mockito menyediakan dua metode yang dapat digunakan untuk mengelola keadaan tiruan selama pengujian: `reset ()` dan `clearInvocations ()`. Sementara kedua metode digunakan untuk mengelola keadaan tiruan, mereka melayani tujuan yang berbeda dan memiliki efek berbeda pada tiruan.
Metode
mockito `reset ()`
Metode `reset ()` dalam mockito digunakan untuk mengatur ulang objek tiruan sepenuhnya. Ini berarti tidak hanya menghapus jumlah permohonan tetapi juga menghilangkan apa pun yang telah ditetapkan pada tiruan. Ini bisa bermasalah karena mengharuskan Anda untuk menembak ulang mock setelah mengatur ulang jika Anda ingin mempertahankan perilaku tertentu untuk tes Anda. Penggunaan `reset ()` umumnya berkecil hati karena dapat menyebabkan tes yang kompleks dan kurang fokus. Disarankan untuk menghindari penggunaan `reset ()` kecuali benar -benar diperlukan, karena dapat mengaburkan maksud tes Anda dan membuat mereka lebih sulit untuk mempertahankan [1] [5] [7].
Metodemockito `clearInvocations ()` Mockito
Metode `clearInvocations ()`, diperkenalkan dalam mockito 2.1, memungkinkan Anda untuk menghapus jumlah doa tiruan tanpa mengatur ulang rintisannya. Ini berarti Anda dapat terus menggunakan stub yang sama sambil memastikan bahwa setiap tes dimulai dengan batu tulis yang bersih mengenai doa metode. Metode ini berguna ketika Anda perlu memverifikasi interaksi dalam skenario stateful atau saat menggunakan kerangka kerja injeksi ketergantungan, tetapi masih harus digunakan dengan hemat. Secara umum disarankan untuk menghindari penggunaan `clearInvocations ()` kecuali diperlukan, karena juga dapat memperumit tes jika tidak digunakan dengan cermat [1] [4] [9].
Perbedaan utama
- Stubbing: `reset ()` menghapus semua stubbing, mengharuskan Anda untuk menopang kembali tiruan, sedangkan `clearininvocations ()` meninggalkan stubbing utuh.
- Hitungan Doa: Kedua metode yang dihitung dengan doa yang jelas, tetapi `reset ()` lakukan sebagai bagian dari reset penuh, sementara `clearInInvocations ()` secara khusus menargetkan jumlah doa.
- Tes Kompleksitas: Kedua metode dapat menyebabkan tes yang lebih kompleks jika tidak digunakan dengan hati-hati, tetapi `reset ()` cenderung menyebabkan lebih banyak masalah karena kebutuhan untuk menjepit ulang tiruan.
Singkatnya, sementara kedua metode dapat digunakan untuk mengelola keadaan tiruan, `reset ()` lebih invasif dan umumnya berkecil hati, sedangkan `ClearInvocations ()` lebih ditargetkan tetapi masih harus digunakan secara bijaksana untuk mempertahankan tes yang bersih dan terfokus.
Kutipan:[1] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-apprepropent-use-of-mockitos-resset-method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearinvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearinvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-alternative-to-resetting-a-mock-after-setup-in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-roothoot-number-of-time
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-clear-invocations
[10] https://github.com/mockk/mockk/discussions/842