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

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

Nov 28, 2024 am 03:44 AM

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!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg: Masa Depan Jadual Data Tasik

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

Cara berkongsi data antara langkah -langkah dalam timun Cara berkongsi data antara langkah -langkah dalam timun Mar 07, 2025 pm 05:55 PM

Cara berkongsi data antara langkah -langkah dalam timun

See all articles