Memahami Perbezaan antara Mockito's doReturn() dan when()
Semasa membangunkan aplikasi Spring MVC, penggunaan Mockito untuk mengejek lapisan perkhidmatan objek adalah amalan biasa. Semasa menerokai keupayaan Mockito, menjadi jelas bahawa kedua-dua doReturn(...).when(...) dan when(...).thenReturn(...) kelihatan melakukan fungsi yang sama. Ini menimbulkan persoalan: adakah terdapat perbezaan antara kedua-dua kaedah ini?
Perbezaan utama antara doReturn() dan when() menjadi jelas apabila menggunakan objek intipan (beranotasi dengan @Spy) dan bukannya ejekan (beranotasi dengan @ Olok-olok).
doReturn() lwn. when() dengan Spied Objek
Contoh
Pertimbangkan kod berikut:
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
Kes Ujian:
@Spy private MyClass myClass; // Works fine, does not invoke anotherMethodInClass() doReturn("test").when(myClass).anotherMethodInClass(); // Throws NullPointerException because anotherMethodInClass() is invoked when(myClass.anotherMethodInClass()).thenReturn("test");
Ringkasnya, apabila menggunakan objek intipan, doReturn() membenarkan anda untuk langkau pelaksanaan kaedah dan tetapkan nilai pulangan secara langsung, manakala apabila() memanggil kaedah sebenar sebelum mengembalikan nilai yang dikehendaki. Pemahaman ini amat penting apabila bekerja dengan objek intipan dalam Mockito.
Atas ialah kandungan terperinci Mockito's doReturn() vs. when(): Apakah Perbezaan Apabila Menggunakan Spied Objects?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!