Mockito:列出具有泛型的Matchers

时间:2012-05-09 08:22:58

标签: java generics warnings mockito matcher

Mockito提供:

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

如果process取代List<Bar>,如何避免警告?

3 个答案:

答案 0 :(得分:248)

对于Java 8及更高版本,它很简单:

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

对于Java 7及更低版本,编译器需要一些帮助。使用anyListOf(Class<T> clazz)

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

答案 1 :(得分:13)

除了上面的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)更改为“任意instanceof Foo”,但any()仍然表示“任何值,包括null”。

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

答案 2 :(得分:0)

在Java 8(版本7或6)之前,我使用新方法ArgumentMatchers.anyList:

GridPane