Mockito.any () проходит интерфейс - PullRequest
133 голосов
/ 27 октября 2011

возможно ли передать тип интерфейса с генериками?

Интерфейс:

public interface AsyncCallback<T>

В моем методе испытаний:

Mockito.any(AsyncCallback.class)

Помещение <ResponseX> позади или для .class не сработало.

Ответы [ 6 ]

241 голосов
/ 18 декабря 2012

Существует безопасный тип: используйте ArgumentMatchers.any() и квалифицируйте его с типом:

ArgumentMatchers.<AsyncCallback<ResponseX>>any()

в качестве pierrefevrier, упомянутого в комментариях, с новыми версиями Mockito это

Matchers.<AsyncCallback<ResponseX>>any()
55 голосов
/ 17 декабря 2014

Используя Java 8, вы можете просто использовать any() (при условии статического импорта) без аргумента или параметра типа из-за расширенного вывода типа.Компилятор теперь знает из целевого типа (тип аргумента метода), что вы на самом деле имеете в виду Matchers.<AsyncCallback<ResponseX>>any(), что является решением до Java 8.

14 голосов
/ 24 сентября 2014

Мне пришлось принять следующий механизм, чтобы учесть генерики:

import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);

Надеюсь, это кому-нибудь поможет.

4 голосов
/ 14 августа 2017

Публикация комментария Pierrefevrier в качестве ответа, который может быть полезен, если он присутствует в ответе вместо комментариев.

С новыми версиями Mockito: (Matchers.<AsyncCallback<ResponseX>>any()

1 голос
/ 01 апреля 2016

В дополнение к ответу thSoft введение квалифицированного вызова в метод any () означало, что я могу удалить квалификацию, поскольку возвращаемый тип допускает логический вывод:

private HashMap<String, String> anyStringStringHashMap() {
    return Matchers.any();
}
0 голосов
/ 27 октября 2011

Вы можете просто привести его, добавив подавляющие предупреждения, если хотите:

@SuppressWarnings("unchecked")    
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)

Если Java допускает «универсальные» обобщения, у них может быть такой метод, который вы ищете

private static <T, E> T<E> mock(Class<T<E>> clazz)
...