所以我使用doAnswer()API来模拟Node类的方法setProperty(String,String)
Node attachmentsJcr = mock(Node.class);
doAnswer(AnswerImpl.getAnswerImpl()).when(attachmentsJcr).setProperty(anyString(),anyString());
AnswerImpl在下面实现 -
public class AnswerImpl implements Answer{
private static AnswerImpl instance;
private AnswerImpl(){
}
public static AnswerImpl getAnswerImpl(){
if(instance == null){
instance = new AnswerImpl();
return instance;
}
else
return instance;
}
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
final String key = (String)(invocationOnMock.getArguments())[0];
final String value = (String)(invocationOnMock.getArguments())[1];
final String mockedObjectName = ?
results.put(key,value); // results here is a hashhmap
return mockedObjectName;
}
}
我能够检索传递给setProperty方法的参数。 但我无法检索mockedObjectName(" attachmentsJcr"在这种情况下)。
答案 0 :(得分:1)
模拟对象没有“名称”。模拟对象存在的唯一原因是允许您控制在与注入其中的模拟对象进行交互时,您所测试的代码“看到”的行为。
换句话说:
Node attachmentsJcr = mock(Node.class);
不创建“真正的”Node对象。是的,attachmentsJcr
是对Node对象的引用;但这个对象是由模拟框架“神奇地”创建的。它没有Node对象的“真实”属性。它只允许您调用Node对象提供的方法。
从这个意义上说:如果你的Node类有一个类似getName()
的方法...那么返回的名字就是你配置为模拟的函数,以便在调用getName()时返回。
只是为了确定:AnswerImpl不是“生产代码”,是吗?