Mockito提供:
when(mock.process(Matchers.any(List.class)));
如何避免警告,如果process
需要List<Bar>
呢?
Mockito提供:
when(mock.process(Matchers.any(List.class)));
如何避免警告,如果process
需要List<Bar>
呢?
Answers:
对于Java 8及更高版本,很简单:
when(mock.process(Matchers.anyList()));
对于Java 7及更低版本,编译器需要一些帮助。用途anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
。即使anyList
有效,它也会发出警告。
anyListOf
已弃用,因此最好不要使用它。在方法重载的情况下,Java 8的示例不起作用,例如,如果您有一个方法可以接受2个不同的列表:List<DBEntity>
并且List<DTO>
我已经解决了使用ArgumentMatchers
泛型的问题:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
除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
”。
注:以上已切换到ArgumentMatchers中的的Mockito新版本,以避免名称冲突与org.hamcrest.Matchers
。较旧版本的Mockito将需要org.mockito.Matchers
如上所述继续使用。
Matchers.any()
很方便!