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
上述之外,您始终可以使用以下语法显式指定泛型:
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
如上。
在 Java 8(版本 7 或 6)之前,我使用新方法 ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
我需要anyList()
一个类型化的 ArrayList,以下工作:
(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()