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
。