Saya mencoba memverifikasi bahwa metode (void) dipanggil di dalam DAO - Saya menggunakan titik komit yang mengirimkan daftar hasil ke titik tersebut, menyetel ulang daftar dan melanjutkan. Katakanlah saya memiliki 4 hal dalam daftar dan saya memiliki titik komit 1, saya berharap metode "kirim" dipanggil 4 kali. Saya dapat memverifikasi bahwa metode tersebut dipanggil sekali dengan menulis
Mockito.verify(mock).send()
itu lolos .. tapi saya ingin memverifikasi berapa kali itu dipanggil. Saya akan berpikir begitu
Mockito.verify(mock.send(), times(4))
akan cukup, tetapi dikatakan bahwa parameternya tidak benar untuk verifikasi.
Kebetulan, jika saya berubah Mockito.verify(mock).send()
ke Mockito.verify(mock.send())
atau Mockito.verify((mock).send())
saya mendapatkan kesalahan yang sama. Pendapat tentang ini?
Mockito.verify(mock, times(4)).send()
. Saya bertanya-tanya mengapa Anda "memindahkan"send()
pemanggilan metode di dalamverify
metode. Anda sudah memiliki sintaks yang benar.verify(mock, atLeastOnce()).send();
Mockito.verify(mock).send()
berlalu tetapi hanya mengenkapsulasi itu menyebabkan kesalahan, yang, tidak mengubah apa pun. Namun, ini adalah kemenangan!Jawaban:
Metode yang diperlukan adalah Mockito # verifikasi :
public static <T> T verify(T mock, VerificationMode mode)
mock
adalah objek Anda mengejek danmode
adalahVerificationMode
yang menggambarkan bagaimana mock harus diverifikasi. Mode yang memungkinkan adalah :verify(mock, times(5)).someMethod("was called five times"); verify(mock, never()).someMethod("was never called"); verify(mock, atLeastOnce()).someMethod("was called at least once"); verify(mock, atLeast(2)).someMethod("was called at least twice"); verify(mock, atMost(3)).someMethod("was called at most 3 times"); verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors verify(mock, only()).someMethod("no other method has been called on the mock");
Anda memerlukan impor statis ini dari
Mockito
kelas untuk menggunakanverify
metode dan mode verifikasi berikut:import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.atMost; import static org.mockito.Mockito.never; import static org.mockito.Mockito.only; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify;
Jadi dalam kasus Anda sintaks yang benar adalah:
Mockito.verify(mock, times(4)).send()
Ini memverifikasi bahwa metode
send
tersebut dipanggil 4 kali pada objek yang diolok-olok. Ini akan gagal jika dipanggil kurang atau lebih dari 4 kali.Jika Anda hanya ingin memeriksa, jika metode tersebut telah dipanggil sekali, maka Anda tidak perlu meneruskan a
VerificationMode
. Sederhanaverify(mock).someMethod("was called once");
akan cukup. Ini digunakan secara internal
verify(mock, times(1)).someMethod("was called once");
.Dimungkinkan untuk memiliki beberapa panggilan verifikasi pada tiruan yang sama untuk mencapai verifikasi "antara". Mockito tidak mendukung hal seperti ini
verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");
, tetapi kami dapat menulisverify(mock, atLeast(4)).someMethod("was called at least four times ..."); verify(mock, atMost(6)).someMethod("... and not more than six times");
sebaliknya, untuk mendapatkan perilaku yang sama. Batasannya disertakan , sehingga kasus uji berwarna hijau ketika metode tersebut dipanggil 4, 5 atau 6 kali.
sumber
VerificationMode
metode tersebut (untuk impor statis atau referensi eksplisit), metode tersebut beradaorg.mockito.internal.verification.VerificationModeFactory
.verify(mock, atLeast(0)).someMethod("was called any number of times");
sangat membantu untuk mengabaikan verifikasi panggilanverify(between(m,n))
yang memverifikasi jumlah panggilan antara m dan n?verify
ke waktu denganatLeast(M)
danatMost(n)
untuk mendapatkan perilaku yang sama. Saya telah mengedit jawaban untuk menjelaskan itu.VerificationModeFactory
. Ini masih tersedia dalam versi terbaru, tetapi saya setuju bahwa kelas internal tidak boleh digunakan.