Odpowiedzi:
Istnieje sposób bezpieczny dla typu: użyj ArgumentMatchers.any()
i zakwalifikuj go za pomocą typu:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
jest faktycznie przestarzały, ale ArgumentMatchers
zadziałał.
Korzystając z języka Java 8, możesz po prostu użyć any()
(zakładając import statyczny) bez argumentu lub parametru typu ze względu na ulepszone wnioskowanie o typie. Kompilator wie teraz na podstawie typu docelowego (typ argumentu metody), który faktycznie masz na myśli Matchers.<AsyncCallback<ResponseX>>any()
, czyli rozwiązanie sprzed wersji Java 8.
any()
pasowałby AsyncCallback<AnyOtherType>
również?
AsyncCallback<AnyOtherType>
nie powinno się nawet kompilować, jeśli typ argumentu to „AsyncCallback <ResponseX>”.
when(x.y(any())).thenAnswer(...)
na przykład, gdzie y
jest public <T> T y(AsyncCallback<T> arg)
. Może lepiej byłoby sprawdzić typ odpowiedzi, jeśli to jest potrzebne?
isA()
. Jeśli obiekt zawiera Class
obiekt odpowiadający typowi, a interfejs to ujawnia, myślę, że możesz to sprawdzić w niestandardowym dopasowywaniu. Lub na przykład w przypadku Collection
możesz sprawdzić rodzaj elementów.
Matchers
został zastąpiony ArgumentMatchers
w Mockito v2
Musiałem przyjąć następujący mechanizm, aby umożliwić stosowanie leków generycznych:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Mam nadzieję, że to komuś pomoże.
Możesz go po prostu przesłać, dodając pomijane ostrzeżenia, jeśli chcesz:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Gdyby Java zezwoliła na „generyczne” typy generyczne, mogłaby mieć metodę taką, jak ta, której szukasz
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
: pre-java 8, jeśli zamierzasz przypisać go do oddzielnej zmiennej, możesz po prostu użyć odpowiedzi any()
tak, jak w odpowiedzi INtoy. Teraz z java 8 any()
może być używany inline bez potrzeby oddzielnego przypisania.
Miałem podobny problem podczas używania Springa Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Tutaj musisz użyć kwalifikacji, b / c metoda findAll może przyjmować wiele typów, takich jak Sort
i Iterable
. Możesz również Mockito.any(Example.class)
oczywiście użyć z ostrzeżeniem bezpieczeństwa typu.