Mockito 提供:
when(mock.process(Matchers.any(List.class)));
如何避免警告,如果 process采取一个 List<Bar>而不是?
process
List<Bar>
对于 Java8及以上版本,这很简单:
when(mock.process(Matchers.anyList()));
对于 Java7及以下版本,编译器需要一些帮助。使用 anyListOf(Class<T> clazz):
anyListOf(Class<T> clazz)
when(mock.process(Matchers.anyListOf(Bar.class)));
除了上面的 anyListOf之外,您总是可以使用以下语法显式地指定泛型:
anyListOf
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java8最近允许基于参数的类型推断,所以如果您正在使用 Java8,这也可以很好地工作:
when(mock.process(Matchers.any()));
请记住,any()和 anyList()都不会应用任何检查,包括类型检查和空检查。在 Mockito 2.x 中,any(Foo.class)被改为表示“任何 instanceof Foo”,但是 any()仍然表示“包括 null在内的任何值”。
any()
anyList()
any(Foo.class)
instanceof
null
注意: 在 Mockito 的新版本中,上面已经切换到了 辩论比赛,以避免与 org.hamcrest.Matchers的名称冲突。旧版本的 Mockito 将需要像上面那样继续使用 ABc1。
org.hamcrest.Matchers
在 Java8之前(版本7或6) ,我使用新的方法 ArgumentMatchers.anyList:
import static org.mockito.Mockito.*; import org.mockito.ArgumentMatchers; verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
我需要 anyList()和一个类型化的数组列表,下面的工作:
(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()