Mockito:使用泛型列出匹配器

新手上路,请多包涵

Mockito 提供:

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

如果 process List<Bar> 取而代之的是 --- 如何避免警告?

原文由 Philippe Blayo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

对于 Java 8 及更高版本,这很简单:

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

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

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

原文由 artbristol 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了上面的 anyListOf 之外,您始终可以使用以下语法显式指定泛型:

 when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 新允许基于参数的类型推断,因此如果您使用的是 Java 8,这也可能有效:

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

请记住,无论是 any() 还是 anyList() 都不会应用任何检查,包括类型或空值检查。 In Mockito 2.x, any(Foo.class) was changed to mean “any instanceof Foo”, but any() still means “any value including null ”。

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

原文由 Jeff Bowman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题