有没有办法使用 mockitos ArgumentCaptore 捕获特定类型的列表。这不起作用:
ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(ArrayList.class);
原文由 Andreas Köberle 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法使用 mockitos ArgumentCaptore 捕获特定类型的列表。这不起作用:
ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(ArrayList.class);
原文由 Andreas Köberle 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,这是一个普遍的泛型问题,而不是 mockito 特有的。
没有 ArrayList<SomeType>
的类对象,因此您不能类型安全地将此类对象传递给需要 Class<ArrayList<SomeType>>
的方法。
您可以将对象转换为正确的类型:
Class<ArrayList<SomeType>> listClass =
(Class<ArrayList<SomeType>>)(Class)ArrayList.class;
ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(listClass);
这将给出一些关于不安全转换的警告,当然你的 ArgumentCaptor 不能真正区分 ArrayList<SomeType>
和 ArrayList<AnotherType>
可能不检查元素。
(正如在另一个答案中提到的,虽然这是一个一般的泛型问题,但对于带有 @Captor
注释的类型安全问题有一个 Mockito 特定的解决方案。它仍然无法区分 ArrayList<SomeType>
和一个 ArrayList<OtherType>
。)
也看看 tenshi 的评论。您可以将原始代码更改为此简化版本:
final ArgumentCaptor<List<SomeType>> listCaptor
= ArgumentCaptor.forClass((Class) List.class);
原文由 Paŭlo Ebermann 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
使用 @Captor 注释 可以避免嵌套的泛型问题: