EasMock中的ComparisonFailure

时间:2014-05-16 18:37:08

标签: java unit-testing junit easymock

我有以下方法,我想使用EasyMock进行测试。

public String createNode(Session session, String name) throws RepositoryException {
    Node root = session.getRootNode();
    Node testNode = root.getNode( "content" );
    if( !testNode.hasNode(name) ) {
        testNode.addNode( name, "nt:unstructured" );
    }
    return testNode.getPath()+"/"+name;
}

测试方法是:

@Test
public void createNodeTest() throws RepositoryException {   
    final Session SESSION_MOCK = EasyMock.createNiceMock((Session.class));
    final Node ROOT_NODE_MOCK = EasyMock.createNiceMock(Node.class);
    final Node CONTENT_NODE_MOCK = EasyMock.createNiceMock(Node.class);
    final Node CHILD_NODE_MOCK = EasyMock.createNiceMock(Node.class);

    EasyMock.expect(SESSION_MOCK.getRootNode()).andReturn(ROOT_NODE_MOCK);       
    EasyMock.expect(ROOT_NODE_MOCK.getNode("content")).andReturn(CONTENT_NODE_MOCK);        
    EasyMock.expect(CONTENT_NODE_MOCK.hasNode("viv")).andReturn(false);        
    EasyMock.expect(CONTENT_NODE_MOCK.addNode("viv","nt:unstructured")).andReturn(CHILD_NODE_MOCK);        
    EasyMock.expect(CHILD_NODE_MOCK.getPath()).andReturn("/content/viv");
    EasyMock.replay(SESSION_MOCK,ROOT_NODE_MOCK,CONTENT_NODE_MOCK);       

    TestableClass tc = new TestableClass();
    assertEquals("/content/viv", tc.createNode(SESSION_MOCK,"viv"));          

    EasyMock.verify(SESSION_MOCK,CONTENT_NODE_MOCK,ROOT_NODE_MOCK);     
}

失败:

  

org.junit.ComparisonFailure:expected:< [/ content] / viv>但是:< [null] / viv>

任何人都可以告诉我哪里错了,我希望得到测试通行证。 感谢

1 个答案:

答案 0 :(得分:0)

我认为你的问题在你的方法中围绕着这些问题:

if( !testNode.hasNode(name) ) {
    testNode.addNode( name, "nt:unstructured" );
}
return testNode.getPath()+"/"+name;

您为此设定的期望如下:

EasyMock.expect(CONTENT_NODE_MOCK.hasNode("viv")).andReturn(false);        
EasyMock.expect(CONTENT_NODE_MOCK.addNode("viv","nt:unstructured")).andReturn(CHILD_NODE_MOCK);        
EasyMock.expect(CHILD_NODE_MOCK.getPath()).andReturn("/content/viv");

问题是您的代码不使用addNode()方法的响应,但是您的测试期望设置为使代码 使用来自{{的响应1}}方法。

我认为你有两种选择:

  1. 如果代码是正确的,那么您需要调整您的期望值:

    addNode()
  2. 如果测试正确(那很好,TDD等等)那么你需要改变你的代码:

    EasyMock.expect(CONTENT_NODE_MOCK.hasNode("viv")).andReturn(false);        
    EasyMock.expect(CONTENT_NODE_MOCK.addNode("viv","nt:unstructured")).andReturn(CHILD_NODE_MOCK);        
    EasyMock.expect(CONTENT_NODE_MOCK.getPath()).andReturn("/content/viv");