问题
Mockito提供:
when(mock.process(Matchers.any(List.class)));
如何避免警告ifprocess
要aList<Bar>
?
#1 热门回答(223 赞)
对于Java 8及更高版本,它很容易:
when(mock.process(Matchers.anyList()));
对于Java 7及更低版本,编译器需要一些帮助。 UseanyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
#2 热门回答(10 赞)
除了上面的anyListOf
之外,你始终可以使用以下语法明确指定泛型:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8新允许基于参数的类型推断,因此如果你使用Java 8,这可能也有效:
when(mock.process(Matchers.any()));
请记住,any()
noranyList()
都不会应用任何检查,包括类型检查或空检查。在Mockito 2.x中,any(Foo.class)
更改为"anyinstanceof
Foo",但是any()
仍然表示"任何值,包括null
"。
注意:以上版本已在Mockito的较新版本中切换为213,78383143,以避免与org.hamcrest.Matchers
发生名称冲突。较旧版本的Mockito将需要继续使用上面的58270136。
#3 热门回答(0 赞)
在Java 8(版本7或6)之前,我使用新方法ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());