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)更改为表示“任何instanceofFoo”,但any()仍表示“任何值包括null”。
注:以上已切换到ArgumentMatchers中的的Mockito新版本,以避免名称冲突与org.hamcrest.Matchers。较旧版本的Mockito将需要org.mockito.Matchers如上所述继续使用。
Matchers.any()很方便!