Rumah > Java > javaTutorial > Mockito: `doReturn()` lwn. `when()`: Bilakah Saya Perlu Menggunakan Yang Mana?

Mockito: `doReturn()` lwn. `when()`: Bilakah Saya Perlu Menggunakan Yang Mana?

Barbara Streisand
Lepaskan: 2024-11-28 03:44:10
asal
925 orang telah melayarinya

Mockito: `doReturn()` vs. `when()`: When Should I Use Which?

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:

  • apabila()...thenReturn() membuat panggilan kaedah sebenar sebelum mengembalikan nilai yang ditentukan. Ini bermakna sebarang pengecualian yang dilemparkan oleh kaedah sebenar masih perlu dikendalikan.
  • doReturn()...when() tidak memanggil kaedah sama sekali. Sebaliknya, ia secara langsung mengembalikan nilai yang telah ditetapkan. Ini memintas sebarang penyebutan kaedah sebenar.

Contoh untuk Menjelaskan Perbezaan:

Pertimbangkan kod berikut:

public class MyClass {
    public String methodToBeTested() {
        return anotherMethodInClass();
    }

    public String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
Salin selepas log masuk

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");
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan