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()
Matchersjest faktycznie przestarzały, ale ArgumentMatcherszadział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 yjest 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 Classobiekt odpowiadający typowi, a interfejs to ujawnia, myślę, że możesz to sprawdzić w niestandardowym dopasowywaniu. Lub na przykład w przypadku Collectionmożesz sprawdzić rodzaj elementów.
Matcherszostał zastąpiony ArgumentMatchersw 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 Sorti Iterable. Możesz również Mockito.any(Example.class)oczywiście użyć z ostrzeżeniem bezpieczeństwa typu.