argThat
plus lambda
w ten sposób możesz zawieść weryfikację argumentów:
verify(mock).mymethod(argThat(
(x)->false
));
gdzie
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat
plus zapewnia
powyższy test „powie” Expected: lambda$... Was: YourClass.toSting...
. Możesz uzyskać dokładniejszą przyczynę niepowodzenia, jeśli używasz twierdzeń w lambda:
verify(mock).mymethod(argThat( x -> {
assertThat(x).isNotNull();
assertThat(x.description).contains("KEY");
return true;
}));
ALE: TO TYLKO DZIAŁA Z 1 METODĄ WEZWANIA. Jeśli zweryfikowana metoda wywoływana jest 2 razy, mockito przekazuje wszystkie wywoływane kombinacje każdemu weryfikatorowi. Zatem mockito oczekuje, że weryfikator po cichu zwraca true
jeden zestaw argumentów i false
(bez wyjątków) dla innych prawidłowych wywołań. Oczekiwanie to nie stanowi problemu dla 1 wywołania metody - powinno po prostu zwrócić true 1 raz.
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
Teraz test mówi: Expected: Obj.description to contain 'KEY'. Was: 'Actual description'
. UWAGA: Użyłem assertJ
asercji, ale to od Ciebie zależy, która struktura asercji będzie używana.
argThat
z wieloma argumentami.
Jeśli używasz argThat
, wszystkie argumenty muszą być dopasowane. Na przykład:
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.
gdzie:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq
dopasowujący
najprostszym sposobem sprawdzenia, czy argument jest równy:
verify(mock).mymethod(eq(expectedValue));
// NOTE: ^ where the parentheses must be closed.
bezpośredni argument
jeśli porównanie przez odniesienie jest dopuszczalne, przejdź do:
verify(mock).mymethod(expectedArg);
// NOTE: ^ where the parentheses must be closed.
Przyczyną awarii oryginalnego pytanie było złe miejsce z paranthes: verify(mock.mymethod...
. To było złe. Prawo byłoby:verify(mock).*