Czy ktoś może mi podać przykład pokazujący, jak używać tej org.mockito.ArgumentCaptor
klasy i czym różni się ona od prostych dopasowań, które są dostarczane z mockito.
Przeczytałem dostarczone dokumenty mockito, ale te nie ilustrują tego jasno, żaden z nich nie jest w stanie wyjaśnić tego jasno.
java
unit-testing
junit
mockito
Ujjwal
źródło
źródło
doSomething(data)
mutacjiinnerData
, to czy ta zmiana będzie obecna wassertEquals("Some inner data", actual.innerData)
, czy zostanieinnerData
uchwycona tak, jak jest, zanimdoSomething
zostanie wykonana?OtherClass
jest makieta, a ponieważ jest teraz zdefiniowana,doSomething()
faktycznie nic nie zrobi, po prostu rejestruje przekazany obiekt. Oznacza to, że zostanie przechwycony tak, jak jest przeddoSomething
wykonaniem.verify
,times(1)
jest wartością domyślną i można ją pominąć.verify
metodę, wykorzystuje te informacje do sprawdzania dopasowań względem przeprowadzanej weryfikacji. Dla każdego parametru pyta, czy pasuje do określonego wywołania, które sprawdza. Gdy ArgumentCaptor jest zaznaczony, po prostu przechowuje wartości, z którymi został wywołany, więc poverify
zakończeniu przechowuje wszystkie odpowiednie wywołania. Z grubsza tak to działa. Mam nadzieję, że to pomożeDwie główne różnice to:
ArgumentCaptor
może przechwycić więcej niż jeden raz.Aby zilustrować to drugie, powiedzmy, że masz:
Wtedy porywacz będzie mógł dać ci dostęp do wszystkich 4 argumentów, na których możesz następnie oddzielnie wykonywać asercje.
W rzeczywistości ta lub dowolna liczba argumentów, ponieważ a
VerificationMode
nie ogranicza się do ustalonej liczby wywołań; w każdym razie porywacz da ci dostęp do nich wszystkich, jeśli chcesz.Ma to również tę zaletę, że takie testy są (imho) dużo łatwiejsze do napisania niż konieczność implementacji własnego
ArgumentMatcher
s - szczególnie jeśli połączysz mockito z assertj.Aha, i rozważ użycie TestNG zamiast JUnit.
źródło
Aby przeprowadzić pełną kontrolę, należy wykonać następujące czynności:
Przygotuj porywacza:
zweryfikuj wywołanie zależnego od komponentu (współpracownika badanego podmiotu) razy (1), jest wartością domyślną, więc nie trzeba go dodawać.
Przekaż argument współpracownikowi
someArgument może służyć do potwierdzeń
źródło
Tutaj podam właściwy przykład jednej metody wywołania zwrotnego. więc załóżmy, że mamy metodę taką jak login ():
Umieściłem tutaj również całą klasę pomocniczą, aby przykład był bardziej przejrzysty: klasa loginService
i mamy listener LoginListener jako:
}
teraz chciałem tylko przetestować metodę login () klasy Login
nie zapomnij również dodać adnotacji nad klasą testową jako
źródło
captor
zdefiniowane w Twojej odpowiedzi?