Ответы:
Существует безопасный для типов способ: используйте ArgumentMatchers.any()и уточняйте его с помощью типа:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchersна самом деле устарела, но ArgumentMatchersработает.
Используя Java 8, вы можете просто использовать any()(при условии статического импорта) без аргумента или параметра типа из-за расширенного вывода типа. Компилятор теперь знает из целевого типа (тип аргумента метода), что вы на самом деле имеете в виду Matchers.<AsyncCallback<ResponseX>>any(), что является решением до Java 8.
any()подходит AsyncCallback<AnyOtherType>?
AsyncCallback<AnyOtherType>не должен даже компилироваться, если тип аргумента - «AsyncCallback <ResponseX>».
when(x.y(any())).thenAnswer(...)например, где yнаходится public <T> T y(AsyncCallback<T> arg). Возможно, было бы лучше проверить тип в ответе, если это то, что нужно?
isA(). Если объект содержит Classобъект, соответствующий типу, и интерфейс предоставляет это, я думаю, вы можете проверить это в пользовательском сопоставителе. Или, например, в случае Collectionвы можете проверить тип элементов.
Matchersбыл заменен на ArgumentMatchersMockito v2
Я должен был принять следующий механизм, чтобы учесть дженерики:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Надеюсь, это кому-нибудь поможет.
Вы можете просто разыграть его, добавив подавляющие предупреждения, если хотите:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Если бы Java допускала «универсальные» генерики, они могли бы иметь такой метод, который вы ищете
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, если вы собираетесь назначить ее отдельной переменной, вы можете просто использовать ее, any()как в ответе Интой. Теперь с Java 8, any()могут быть использованы inline без необходимости отдельного назначения.
У меня была похожая проблема с использованием Spring Example:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Здесь вы должны использовать квалификацию, так как метод findAll может иметь несколько типов, например Sortи Iterable. Вы также можете использовать Mockito.any(Example.class)с предупреждением безопасности типа.