Мокіто пропонує:
when(mock.process(Matchers.any(List.class)));
Як уникнути попередження , якщо processбере List<Bar>замість цього?
Мокіто пропонує:
when(mock.process(Matchers.any(List.class)));
Як уникнути попередження , якщо processбере List<Bar>замість цього?
Відповіді:
Для Java 8 і вище це легко:
when(mock.process(Matchers.anyList()));
Для Java 7 і нижче компілятору потрібно трохи допомогти. Використання anyListOf(Class<T> clazz):
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf. Незважаючи на те, що anyListпрацює, він видає попередження.
anyListOfзастаріла, тому краще НЕ використовувати її. Приклад для Java 8 не працює в разі перевантаження методу, наприклад, якщо у вас є метод, який приймає два різних списки: List<DBEntity>і List<DTO>я вирішив цю проблему, використовуючи ArgumentMatchersgeneric:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Крім anyListOfвищезазначеного, ви завжди можете чітко вказати генеричні дані, використовуючи цей синтаксис:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8 нещодавно дозволяє виводити тип на основі параметрів, тож якщо ви використовуєте Java 8, це може також працювати:
when(mock.process(Matchers.any()));
Пам’ятайте, що ні, any()ні anyList()застосовуватимуться жодні перевірки, включаючи перевірки типу чи нуль У Mockito 2.x any(Foo.class)було змінено на «будь-який instanceofFoo», але any()все ще означає «будь-яке значення, включаючи null».
ПРИМІТКА. Вищезгадане перейшло на ArgumentMatchers у новіших версіях Mockito, щоб уникнути зіткнення з іменем org.hamcrest.Matchers. Старіші версії Mockito потрібно буде продовжувати використовувати, org.mockito.Matchersяк зазначено вище.
Matchers.any()дуже зручно!
Перед Java 8 (версії 7 або 6) я використовую новий метод ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());