【发布时间】:2023-03-12 11:30:02
【问题描述】:
我正在尝试验证是否调用了具有以下签名的方法:
public void process(Map<String, Set<String>> data) {
...
}
嵌套的参数化 Set 给我带来了困难。我可以像这样使用 any() 匹配器正确验证它:
verify(dataProcessor).process(Matchers.<Map<String, Set<String>>> any());
如Mockito: Verifying with generic parameters 中所述,虽然很烦人,但如果我直接静态导入 Matchers.any 并将其称为:
verify(dataProcessor).process(<Map<String, Set<String>>> any())
但在这种情况下,anyMapOf(clazz, clazz) 似乎是更合适的匹配器。既然你不能做 Set.class 我不确定你会怎么做。由于缺少泛型,以下内容不起作用:
verify(dataProcessor).process(anyMapOf(String.class, Set.class));
是否可以使用 anyMapOf 来验证这种情况,或者我应该坚持使用 Matchers。any()?
【问题讨论】:
-
你的方法签名已经限制了方法使用的参数类型,你为什么不直接使用
any()?不使用Map<String, Set<String>>调用您的方法的代码甚至不会编译... -
@fge Java 类型推断不会根据
process中可用的参数类型推断对any的调用中的类型变量,因为process可能有重载和/或类型参数它自己的。它在返回值和字段中这样做,因为类型已经明确定义为返回值类型或字段类型。都在the extremely-opaque JLS 15.12.2。
标签: java generics mocking mockito