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
Barbara Streisandasal
2024-11-28 03:44:10966semak imbas

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();
    }
}

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!

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