2012-05-09 51 views

回答

208

对于Java 8.0及以上,这很容易:

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

对于Java 7和下面,编译器需要一点帮助。使用anyListOf(Class<T> clazz)

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

的Java 8新允许基于参数类型推断,因此,如果您使用的是Java:以上

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,你可以明确地使用此语法始终指定泛型8,这也可能有效:

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

记住,无论any()也不anyList() w ^不适用任何检查,包括类型检查或空检查。在Mockito 2.x中,any(Foo.class)更改为“任何instanceof Foo”,但any()仍表示“包括null在内的任何值”。

注意:以上已更换为ArgumentMatchers在更新版本的Mockito中,以避免与org.hamcrest.Matchers发生名称冲突。较早版本的Mockito需要继续使用org.mockito.Matchers

+2

'''Matchers.any()'''很方便! – MBach

+0

Matchers现已弃用,这里的信息来自mockito “Use 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