Czy istnieje sposób, aby metoda skrótowa zwracała różne obiekty przy kolejnych wywołaniach? Chciałbym to zrobić, aby przetestować nieokreślone odpowiedzi od ExecutorCompletionService
. tj. w celu przetestowania, niezależnie od kolejności zwrotu metod, wynik pozostaje stały.
Kod, który chcę przetestować, wygląda mniej więcej tak.
// Create an completion service so we can group these tasks together
ExecutorCompletionService<T> completionService =
new ExecutorCompletionService<T>(service);
// Add all these tasks to the completion service
for (Callable<T> t : ts)
completionService.submit(request);
// As an when each call finished, add it to the response set.
for (int i = 0; i < calls.size(); i ++) {
try {
T t = completionService.take().get();
// do some stuff that I want to test
} catch (...) { }
}
doAnswer
pisać ani pisaćAnswer
w sprawie, o której wspominasz. Możesz po prostu użyćdoReturn(...).when(someSpy).someMethod(...)
. Rozsądne wydaje się założenie, że Emma interesuje się szyderstwami, a nie szpiegami, ale chyba mógłbym dodać coś do mojej odpowiedzi, aby to przeliterować. Dziękuję za komentarz.Jak już wspomniano, prawie wszystkie połączenia można łączyć w łańcuchy.
Więc możesz zadzwonić
Więcej informacji w Dokumentacji Mockito .
źródło
mock.method
w tym przykładzie? Chcę coś w stylu, wróć za pierwszym razem, ale wróć do wszystkich pozostałych.Możesz nawet łączyć
doReturn()
takie wywołania metodsłodkie, prawda?
źródło
Wdrożyłem
MultipleAnswer
klasę, która pomaga mi odgadnąć różne odpowiedzi w każdym połączeniu. Oto fragment kodu:źródło
Poniższe mogą być używane jako wspólna metoda zwracania różnych argumentów dla różnych wywołań metod. Jedyne, co musimy zrobić, to przekazać tablicę w kolejności, w której obiekty powinny być pobierane w każdym wywołaniu.
Dawny.
getAnswerForSubsequentCalls(mock1, mock3, mock2);
zwróci obiekt mock1 przy pierwszym wywołaniu, obiekt mock3 przy drugim wywołaniu i obiekt mock2 przy trzecim wywołaniu. Powinny być używane jakwhen(something()).doAnswer(getAnswerForSubsequentCalls(mock1, mock3, mock2));
To jest prawie podobne dowhen(something()).thenReturn(mock1, mock3, mock2);
źródło
Powiązane z odpowiedzią @ [Igora Nikołajewa] sprzed 8 lat,
Answer
można nieco uprościć użycie wyrażenia lambda dostępnego w Javie 8.lub prościej:
źródło
Styl BDD:
źródło
źródło