Mockito: список совпадений с дженериками

Mockito предлагает:

when(mock.process(Matchers.any(List.class)));

Как избежать предупреждения, если process вместо этого принимает List<Bar>?

Ответ 1

Для Java 8 и выше это легко:

when(mock.process(Matchers.anyList()));

Для Java 7 и ниже компилятор нуждается в некоторой помощи. Используйте anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

Ответ 2

В дополнение к anyListOf выше, вы всегда можете явно указать обобщения, используя этот синтаксис:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 new позволяет вводить тип на основе параметров, поэтому, если вы используете Java 8, это может также работать:

when(mock.process(Matchers.any()));

Помните, что ни any(), ни anyList() не будут применены никакие проверки, включая проверки типа или нуля. В Mockito 2.x, any(Foo.class) был изменен на "any instanceof Foo", но any() по-прежнему означает "любое значение, включая null".

ПРИМЕЧАНИЕ. Вышеперечисленное переключилось на ArgumentMatchers в новых версиях Mockito, чтобы избежать столкновения имен с org.hamcrest.Matchers. Старые версии Mockito должны будут продолжать использовать org.mockito.Matchers, как указано выше.