Відповіді:
Існує безпечний для вас спосіб: використовуйте 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 дозволила б "generic" generic, вони могли б мати такий метод, як це те, що ви шукаєте
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()як у відповідіINtoy. Тепер з java 8 any()можна використовувати вбудований без необхідності окремого призначення.
У мене була схожа проблема із використанням Spring Example:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Тут ви повинні використовувати кваліфікацію, метод b / c findAll може приймати кілька типів, як Sortі Iterable. Ви також можете використовувати Mockito.any(Example.class)курс із попередженням про безпеку типу.