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());
我需要使用类型化的 ArrayList anyList()
,以下方法有效:
(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()