Можно ли передать тип интерфейса с помощью дженериков?
Интерфейс:
public interface AsyncCallback<T>
В моем методе тестирования:
Mockito.any(AsyncCallback.class)
Помещение <ResponseX>
позади или для .class
не работает.
Можно ли передать тип интерфейса с помощью дженериков?
Интерфейс:
public interface AsyncCallback<T>
В моем методе тестирования:
Mockito.any(AsyncCallback.class)
Помещение <ResponseX>
позади или для .class
не работает.
Существует безопасный тип: используйте ArgumentMatchers.any()
и квалифицируйте его с типом:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
как pierrefevrier, упомянутый в комментариях, с новыми версиями Mockito it
Matchers.<AsyncCallback<ResponseX>>any()
Используя Java 8, вы можете просто использовать any()
(при условии статического импорта) без аргумента или параметра типа из-за расширенного вывода типа. Теперь компилятор знает из целевого типа (тип аргумента метода), который вы на самом деле означаете Matchers.<AsyncCallback<ResponseX>>any()
, который является пред-Java-8.
Мне пришлось принять следующий механизм, чтобы разрешить дженерики:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Надеюсь, это поможет кому-то.
Проводя комментарий pierrefevrier как ответ, который может быть полезен, если он присутствует в ответе вместо комментариев.
С новыми версиями Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Вы можете просто бросить его, добавив, если хотите: подавить предупреждения:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Если Java допускает "общие" дженерики, у них может быть такой метод, который вы ищете
private static <T, E> T<E> mock(Class<T<E>> clazz)
В дополнение к thSoft ответ на ввод квалифицированного вызова в метод any() означает, что я мог бы удалить квалификацию, так как допустимый вывод возвращаемого типа:
private HashMap<String, String> anyStringStringHashMap() {
return Matchers.any();
}