如何为 Map<String, SomeCustomClass>
创建一个参数捕获器?
我有一段遵循以下模式的代码:
import java.util.HashMap;
import java.util.Map;
public class CompoundClass {
public CompoundClass (String a, String b){
this.a = a;
this.b = b;
}
public String a;
public String b;
}
public class SubClass {
public void doSomeThingSubClass(Map<String, CompoundClass> mapSb) {
...
}
}
public class Example {
public SubClass sb;
public Example(SubClass sb) {
this.sb = sb;
}
public void doSomeThing () {
Map<String, CompoundClass> mapSb = new HashMap<>();
mapSb.put("x", new CompoundClass("aa","bb"));
sb.doSomeThingSubClass(mapSb);
}
}
我想测试方法doSomethingSubClass(mapSb)
是否被调用,我需要能够检查它使用了什么参数。为此,我有以下单元测试:
@Test
void TestDoSomehing(){
SubClass sb = mock(SubClass.class);
Example ex = new Example(sb);
ArgumentCaptor<Map<String, CompoundClass>> argCaptor = ArgumentCaptor.forClass(Map<String, CompoundClass>.class);
ex.doSomeThing();
verify(sb).doSomeThingSubClass(argCaptor.capture());
System.out(argCaptor.getValue().get('x').a);
}
问题在于上述对argCaptor的初始化会产生以下错误信息:"Cannot select from parametrized type"。因此,问题是如何正确声明和初始化一个类似于
Map<String, SomeCustomeClass>
的map对象的argument captor?谢谢!
argCaptor
未初始化/在调用argCaptor.capture()
时出现了NullPointerException
。或者你是指其他什么? - Martin del Necesario