我有以下方法,我想使用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>
任何人都可以告诉我哪里错了,我希望得到测试通行证。 感谢
答案 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}}方法。
我认为你有两种选择:
如果代码是正确的,那么您需要调整您的期望值:
addNode()
如果测试正确(那很好,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");