Próbuję sprawdzić, czy (void) metoda jest wywoływana wewnątrz DAO - używam punktu zatwierdzenia, który wysyła listę wyników do tego momentu, resetuje listę i kontynuuje. Powiedzmy, że mam 4 rzeczy na liście i mam punkt zatwierdzenia 1, spodziewałbym się, że metoda „wyślij” zostanie wywołana 4 razy. Mogę sprawdzić, czy metoda zostanie wywołana raz, pisząc
Mockito.verify(mock).send()
przechodzi ... ale chcę sprawdzić, ile razy został wywołany. Myślę, że tak
Mockito.verify(mock.send(), times(4))
byłoby wystarczające, ale mówi, że parametry nie są poprawne do weryfikacji.
Nawiasem mówiąc, jeśli zmienię Mockito.verify(mock).send()
na Mockito.verify(mock.send())
lub Mockito.verify((mock).send())
otrzymam ten sam błąd. Co o tym myślisz?
Mockito.verify(mock, times(4)).send()
. Zastanawiam się, dlaczego „przeniosłeś”send()
wywołanie metody wewnątrzverify
metody. Masz już odpowiednią składnię.verify(mock, atLeastOnce()).send();
Mockito.verify(mock).send()
przeszło, ale samo hermetyzacja spowodowała błąd, który niczego nie zmienia. jednak to wygrana!Odpowiedzi:
Niezbędna metoda to weryfikacja Mockito # :
mock
to twój wyśmiewany obiekt imode
to onVerificationMode
opisuje, jak powinna zostać zweryfikowana. Możliwe tryby to :Będziesz potrzebować tych statycznych importów z
Mockito
klasy, aby użyćverify
metody i tych trybów weryfikacji:Więc w twoim przypadku poprawna składnia będzie wyglądać następująco:
To sprawdza, czy metoda
send
została wywołana 4 razy na mockowanym obiekcie. Nie powiedzie się, jeśli został wywołany mniej lub więcej niż 4 razy.Jeśli chcesz tylko sprawdzić, czy metoda została wywołana raz, nie musisz przekazywać pliku
VerificationMode
. Prostypowinno wystarczyć. Używa wewnętrznie
verify(mock, times(1)).someMethod("was called once");
.Możliwe jest posiadanie wielu wywołań weryfikacyjnych na tym samym makiecie, aby uzyskać weryfikację „pomiędzy”. Mockito nie obsługuje czegoś takiego
verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");
, ale możemy pisaćzamiast tego uzyskać to samo zachowanie. Granice są uwzględnione , więc przypadek testowy jest zielony, gdy metoda została wywołana 4, 5 lub 6 razy.
źródło
VerificationMode
metody (w przypadku importu statycznego lub jawnego odwołania), są one dostępneorg.mockito.internal.verification.VerificationModeFactory
.verify(mock, atLeast(0)).someMethod("was called any number of times");
pomogło zignorowanie weryfikacji połączeniaverify(between(m,n))
co weryfikuje liczbę połączeń między m a n?verify
do czasu z tym samym zachowaniematLeast(M)
iatMost(n)
uzyskać takie samo zachowanie. Zredagowałem odpowiedź, żeby to wyjaśnić.VerificationModeFactory
. Jest nadal dostępny w najnowszej wersji, ale zgadzam się, że nie należy używać klas wewnętrznych.