Mockito: Memahami Perbezaan antara doReturn() dan when()
Adalah boleh difahami untuk menghadapi kekeliruan antara doReturn() Mockito... kaedah when() dan when()...thenReturn(), kerana mereka mungkin kelihatan melakukan perkara yang sama. Walaupun kedua-duanya boleh mengejek panggilan kaedah dan mengembalikan nilai yang dipratentukan, terdapat perbezaan halus yang menjadi relevan apabila menggunakan objek intipan (beranotasi dengan @Spy) dan bukannya mengejek (beranotasi dengan @Mock).
Kuncinya Perbezaan: Gelagat Invokasi Kaedah
Perbezaan penting terletak pada cara kaedah ini bertindak apabila berinteraksi dengan objek intipan:
Contoh untuk Menjelaskan Perbezaan:
Pertimbangkan kod berikut:
public class MyClass { public String methodToBeTested() { return anotherMethodInClass(); } public String anotherMethodInClass() { throw new NullPointerException(); } }
Uji menggunakan intipan object:
@Spy private MyClass myClass; // ... // This approach will work without throwing an exception doReturn("test").when(myClass).anotherMethodInClass(); // This approach will throw a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
Dengan objek intipan, when()...thenReturn() cuba memanggil anotherMethodInClass() yang akan membuang NullPointerException. Sebaliknya, doReturn()...when() mengelak daripada memanggil kaedah dan mengembalikan "ujian" secara langsung, menyekat pengecualian.
Kesimpulan
Perbezaan antara ini dua kaedah menjadi jelas apabila menggunakan objek intipan. Untuk objek intipan, doReturn()...when() menawarkan kawalan yang lebih besar dengan memintas panggilan kaedah sebenar dan mengembalikan nilai yang dipratentukan secara langsung. Sebaliknya, when()...thenReturn() menggunakan kaedah sebenar, yang boleh membawa kepada pengecualian atau tingkah laku lain yang tidak diingini. Oleh itu, memilih kaedah yang sesuai bergantung pada tingkah laku yang diingini dan sama ada anda menggunakan objek olok-olok atau intipan.
Atas ialah kandungan terperinci Mockito: `doReturn()` lwn. `when()`: Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!