Відповіді:
Існує безпечний для вас спосіб: використовуйте 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 дозволила б "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)
курс із попередженням про безпеку типу.