所以我正在使用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 方法的参数。但是我无法检索模拟对象名称(在这种情况下为"附件Jcr")。
模拟对象没有"名称"。模拟对象存在的唯一原因是允许您控制受测代码在与注入其中的模拟对象交互时"看到"的行为。
换句话说:
Node attachmentsJcr = mock(Node.class);
不会创建"真正的"节点对象。是的,attachmentsJcr
是对节点对象的引用;但是这个对象是由模拟框架"神奇地"创建的。它没有 Node 对象的"真实"属性。它只允许您调用 Node 对象将提供的方法。
从这个意义上说:如果你的 Node 类有一个像 getName()
这样的方法......那么返回的名称只是您配置为模拟以在调用 getName() 时返回的名称。
肯定的是:AnswerImpl不是"生产代码",是吗?