Rumah >Java >javaTutorial >Mockito's doReturn() vs. when(): Apakah Perbezaan Apabila Menggunakan Spied Objects?

Mockito's doReturn() vs. when(): Apakah Perbezaan Apabila Menggunakan Spied Objects?

Barbara Streisand
Barbara Streisandasal
2024-12-16 17:28:10544semak imbas

Mockito's doReturn() vs. when(): What's the Difference When Using Spied Objects?

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

  • doReturn(...).when(...): Membolehkan anda mengubah suai nilai pulangan sesuatu kaedah tanpa benar-benar menggunakan kaedah tersebut.
  • apabila(...).thenReturn(...): Mendapat pelaksanaan kaedah sebenar sebelum mengembalikan nilai yang ditentukan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn