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 truebağımsız değişken kümelerinden biri için sessizce geri dönmesini ve falsediğ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 assertJiddiaları 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).*