Mockito:列出具有泛型的Matchers

问题

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)更改为"anyinstanceofFoo",但是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());