Ответы:
Существует безопасный для типов способ: используйте 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
был заменен на ArgumentMatchers
Mockito 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)
с предупреждением безопасности типа.