Mockito предлагает:
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 не работает в случае перегрузки метода, например, если у вас есть метод, принимающий 2 разных списка:List<DBEntity>
иList<DTO>
я решил эту проблему сArgumentMatchers
помощью generic:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
В дополнение к
anyListOf
вышесказанному, вы всегда можете явно указать непатентованные значения, используя этот синтаксис:В Java 8 недавно допускается вывод типов на основе параметров, поэтому, если вы используете Java 8, это может также работать:
Помните, что ни
any()
неanyList()
будет применяться никаких проверок, в том числе проверки типа или нулевых. В Mockito 2.xany(Foo.class)
было изменено значение «любойinstanceof
Foo», ноany()
все равно означает «любое значение, включаяnull
».ПРИМЕЧАНИЕ. Вышесказанное переключилось на ArgumentMatchers в более новых версиях Mockito, чтобы избежать конфликта имен
org.hamcrest.Matchers
. Старые версии Mockito нужно будет продолжать использовать,org.mockito.Matchers
как указано выше.источник
Matchers.any()
это очень удобно!До Java 8 (версии 7 или 6) я использовал новый метод ArgumentMatchers.anyList:
источник