argThat
plus lambda
itulah cara Anda dapat gagal verifikasi argumen Anda:
verify(mock).mymethod(argThat(
(x)->false
));
dimana
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat
plus menegaskan
tes di atas akan "mengatakan" Expected: lambda$... Was: YourClass.toSting...
. Anda bisa mendapatkan penyebab kegagalan yang lebih spesifik jika menggunakan penegasan dalam lambda:
verify(mock).mymethod(argThat( x -> {
assertThat(x).isNotNull();
assertThat(x.description).contains("KEY");
return true;
}));
TAPI: HANYA INI BEKERJA DENGAN 1 METODE PANGGILAN. Jika metode terverifikasi disebut 2+ kali, mockito meneruskan semua kombinasi yang dipanggil ke setiap verifier. Jadi mockito mengharapkan verifikasi Anda secara diam-diam kembali true
untuk salah satu set argumen, dan false
(tanpa pengecualian) untuk panggilan yang valid lainnya. Harapan itu bukan masalah untuk 1 panggilan metode - itu hanya harus mengembalikan true 1 kali.
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
Sekarang tes mengatakan: Expected: Obj.description to contain 'KEY'. Was: 'Actual description'
. CATATAN: Saya menggunakan assertJ
penegasan, tetapi terserah Anda kerangka pernyataan mana yang harus digunakan.
argThat
dengan banyak argumen.
Jika Anda menggunakan argThat
, semua argumen harus dilengkapi dengan kecocokan. Misalnya:
verify(mock).mymethod(eq("VALUE_1"), argThat((x)->false));
// above is correct as eq() is also an argument matcher.
verify(mock).mymethod("VALUE_1", argThat((x)->false));
// above is incorrect; an exceptoin will be thrown, as the fist arg. is given without an argument matcher.
dimana:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq
korek api
cara termudah untuk memeriksa apakah argumennya sama:
verify(mock).mymethod(eq(expectedValue));
// NOTE: ^ where the parentheses must be closed.
argumen langsung
jika perbandingan dengan ref dapat diterima, maka lanjutkan dengan:
verify(mock).mymethod(expectedArg);
// NOTE: ^ where the parentheses must be closed.
AKAR PENYEBAB kegagalan pertanyaan awal adalah tempat yang salah dari paranthes: verify(mock.mymethod...
. Itu salah. Yang benar adalah:verify(mock).*