


Mockito: `doReturn()` lwn. `when()`: Bilakah Saya Perlu Menggunakan Yang Mana?
Nov 28, 2024 am 03:44 AMMockito: 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!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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?

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?

Iceberg: Masa Depan Jadual Data Tasik

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

Cara berkongsi data antara langkah -langkah dalam timun
