匹配器的Mockito提供:的Mockito:列表泛型
when(mock.process(Matchers.any(List.class)));
如何避免,如果process
需要List<Bar>
,而不是警告?
匹配器的Mockito提供:的Mockito:列表泛型
when(mock.process(Matchers.any(List.class)));
如何避免,如果process
需要List<Bar>
,而不是警告?
对于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)));
除了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
。
注意:这在Mockito 2中已弃用。*将在Mockito 3中删除。因为Java 8编译器现在可以推断该类型,所以不推荐使用。 – Kip
@Kip谢谢我已经更新了答案 – artbristol
@artbristol你知道anySet()是否应该和anyList()一样吗?我使用Java 8,并在Eclipse IDE中引发警告 –