Mockito:与generics列表匹配

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之外,您始终可以使用以下语法显式指定generics:

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

Java 8最新允许基于参数的types推断,所以如果您使用的是Java 8,那么也可以这样做:

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

请记住any()anyList()都不会应用任何检查,包括types检查或空检查。 在Mockito 2.x中, any(Foo.class)被改为“任何Foo的instanceof ”,但any()仍然意味着“任何包含null ”。

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