2012-05-09 2 views

ответ

208

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

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

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

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

Примечание: это устарело в Mockito 2. * и будет удалено в Mockito 3. Устарело, потому что Java 8-компилятор может вывести тип сейчас. – Kip

+0

@Kip спасибо, я обновил ответ – artbristol

+0

@artbristol Знаете ли вы, что если anySet() должен работать так же, как anyList()? Я нахожусь в Java 8, и в Eclipse IDE выдается предупреждение. –

10

В дополнение к 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) было изменено на "any instanceof Foo", но any() по-прежнему означает "любое значение, включая null".

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

+2

'' 'Matchers.any()' '' очень удобно! – MBach

+0

Матчи теперь устарели, вот информация от mockito «Используйте ArgumentMatchers. Этот класс теперь устарел, чтобы избежать столкновения имени с классом Hamcrest org.hamcrest.Matchers. Этот класс, вероятно, будет удален в версии 3.0». https://static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/Matchers.html – oddmeter

+0

@JeffBowman нет пота, просто оставляя записку для других :) – oddmeter