argThat
artı lambda
argüman doğrulama işleminizi bu şekilde başaramazsınız:
verify(mock).mymethod(argThat(
(x)->false
));
nerede
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat
artı ileri sürüyor
yukarıdaki test "söyleyecektir" Expected: lambda$... Was: YourClass.toSting...
. Lambda'da ekleri kullanırsanız, başarısızlığın daha spesifik bir nedenini alabilirsiniz:
verify(mock).mymethod(argThat( x -> {
assertThat(x).isNotNull();
assertThat(x.description).contains("KEY");
return true;
}));
AMA: SADECE 1 YÖNTEM ARAMASI İLE ÇALIŞIR. Doğrulanmış yöntem 2+ kez çağrılırsa, mockito çağrılan tüm kombinasyonları her doğrulayıcıya geçirir. Bu nedenle mockito, doğrulayıcınızın true
bağımsız değişken kümelerinden biri için sessizce geri dönmesini ve false
diğer geçerli çağrılar için ( onaylama istisnası yok) beklemesini bekler . Bu beklenti 1 yöntem çağrısı için bir sorun değildir - sadece 1 kez doğru dönmelidir.
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
Şimdi Test diyor: Expected: Obj.description to contain 'KEY'. Was: 'Actual description'
. NOT: Ben assertJ
iddiaları kullandım , ama hangi iddia çerçevesini kullanmak size kalmış.
argThat
birden çok argüman ile.
Eğer kullanırsanız argThat
, tüm argümanlarla eşleşme sağlanmalıdır. Örneğin:
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.
nerede:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq
eşleştirici
argümanın eşit olup olmadığını kontrol etmenin en kolay yolu:
verify(mock).mymethod(eq(expectedValue));
// NOTE: ^ where the parentheses must be closed.
doğrudan tartışma
ref ile karşılaştırma kabul edilebilirse, o zaman devam edin:
verify(mock).mymethod(expectedArg);
// NOTE: ^ where the parentheses must be closed.
Orijinal soru başarısızlık KÖK NEDEN paranthes yanlış bir yerdi: verify(mock.mymethod...
. Bu yanlıştı. Doğru:verify(mock).*