Rumah >Java >javaTutorial >Mockito: `doReturn()` lwn. `when()`: Bilakah Anda Harus Menggunakan Yang Mana dengan Objek Spied?

Mockito: `doReturn()` lwn. `when()`: Bilakah Anda Harus Menggunakan Yang Mana dengan Objek Spied?

Patricia Arquette
Patricia Arquetteasal
2024-11-28 18:19:151073semak imbas

Mockito: `doReturn()` vs. `when()`: When Should You Use Which with Spied Objects?

Mockito: Memahami Perbezaan Halus antara doReturn() dan when()

Apabila menggunakan rangka kerja mengejek Mockito untuk meningkatkan keupayaan ujian, pembangun sering menghadapi doReturn() dan kaedah bila(). Walaupun kedua-dua kaedah berfungsi untuk tujuan penyeruan kaedah stubbing, perbezaan yang ketara terletak di antara mereka apabila bekerja dengan objek intipan (diberi anotasi dengan @Spy).

apabila(...).thenReturn(...) vs doReturn(...).apabila(...)

apabila(...).thenReturn(...):

  • Membuat panggilan kaedah sebenar sebelum mengembalikan nilai yang ditentukan.
  • Jika kaedah yang dipanggil melemparkan pengecualian, ia mesti dikendalikan atau diejek secara berasingan.

doReturn(...).when(...):

  • Elakkan panggilan kaedah sebenar sepenuhnya.

Contoh Praktikal

Pertimbangkan perkara berikut MyClass:

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

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}

Menguji dengan Perisik

doReturn(...).bila(...):

@Spy
private MyClass myClass;

// Works as expected
doReturn("test").when(myClass).anotherMethodInClass();

apabila(...).thenReturn(...):

// Throws a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");

Dalam ini senario, doReturn() memastikan pengecualian dalam anotherMethodInClass() dielakkan semasa masih mengembalikan nilai yang diingini. Sebaliknya, when() mencetuskan panggilan kaedah sebenar, mengakibatkan NullPointerException dilemparkan.

Oleh itu, apabila bekerja dengan objek intipan, pilihan antara doReturn() dan when() bergantung pada sama ada anda mahu menggunakan kaedah sebenar atau memintas sama sekali.

Atas ialah kandungan terperinci Mockito: `doReturn()` lwn. `when()`: Bilakah Anda Harus Menggunakan Yang Mana dengan Objek Spied?. 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