我需要对一个函数进行单元测试,该函数对另一个void
方法进行内部调用。
Class TestClass {
public void testMethod() {
someOtherClass.testMethod(); // This is void method
}
}
我需要模拟someOtherClass.testMethod()
,然后使用断言来验证testMethod
中的TestClass
。
抱歉,如果我的帖子令人困惑。让我说得更清楚。我的意图是-
public void testMethodTest() {
TestClass tC = new TestClass(); SomeOtherClass obj = EasyMock.createNiceMock(SomeOtherClass.class);
tC.set(obj);
obj.testMethod();
EasyMock.expectLastCall().andAnswer(new IAnswer() {
public Object answer() { // return the value to be returned by the method (null for void)
return null;
}
});
EasyMock.replay(obj);
tC.testMethod(); // How to verify this using assert.
}
答案 0 :(得分:0)
您写的东西正在工作。但是,它过于复杂,您无法验证是否实际调用了void方法。为此,您需要在末尾添加EasyMock.verify(obj);
。
然后,重要的一点是,如果在重播之前调用void方法,它将记录一次调用。无需添加expectLastCall
。另外,您可以使用expectLastCall().andVoid()
代替IAnswer
。
这是我的写法:
@Test
public void testMethodTest() {
TestClass tC = new TestClass();
SomeOtherClass obj = mock(SomeOtherClass.class); // no need to use a nice mock
tC.set(obj);
obj.testMethod();
replay(obj);
tC.testMethod();
verify(obj); // Verify testMethod was called
}