Mockito:列出带有泛型的匹配器



Mockito提供:

when(mock.process(Matchers.any(List.class)));

如果process采取List<Bar>,如何避免警告?

对于 Java 8 及更高版本,这很容易:

when(mock.process(Matchers.anyList()));

对于 Java 7 及更低版本,编译器需要一些帮助。使用anyListOf(Class<T> clazz)

when(mock.process(Matchers.anyListOf(Bar.class)));

除了上述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在内的任何值"。

注意:上述内容已在较新版本的 Mockito 中切换到 ArgumentMatchers,以避免与 org.hamcrest.Matchers 发生名称冲突。旧版本的Mockito需要继续使用上述org.mockito.Matchers

在Java 8(版本7或6)之前,我使用新方法ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());

我需要使用类型化的 ArrayList anyList(),以下方法有效:

(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()

相关内容

  • 没有找到相关文章

最新更新