在mockito中检索模拟对象名称

时间:2017-01-13 07:43:13

标签: java junit mocking mockito junit4

所以我使用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"在这种情况下)。

1 个答案:

答案 0 :(得分:1)

模拟对象没有“名称”。模拟对象存在的唯一原因是允许您控制在与注入其中的模拟对象进行交互时,您所测试的代码“看到”的行为。

换句话说:

Node attachmentsJcr = mock(Node.class);   

创建“真正的”Node对象。是的,attachmentsJcr是对Node对象的引用;但这个对象是由模拟框架“神奇地”创建的。它没有Node对象的“真实”属性。它只允许您调用Node对象提供的方法

从这个意义上说:如果你的Node类有一个类似getName()的方法...那么返回的名字就是你配置为模拟的函数,以便在调用getName()时返回。

只是为了确定:AnswerImpl不是“生产代码”,是吗?