根据答案here,@ Mock注释和createMock在功能视图中是相同的。但是,在使用这些时我遇到了一个奇怪的问题。这里的背景很少。
我必须测试从Abstractclass调用方法的ClassUnderTest。当我应该从单元测试调用ClassUnderTest时,我希望调用Abstractclass方法。
`
ActionText
` 我正面临着这些问题:
当我使用@Mock注释时,EasyMock验证会抛出一个错误,说明Abstractclass.addValue()期望未得到满足。
但是,当我删除@Mock注释时,它工作正常,没有错误。
对于非抽象类,@ Mock对我来说很好。
有人可以解释一下这种行为吗?
答案 0 :(得分:0)
您的真实代码必须与此不同。两者都应该表现完全相同。否则这是一个错误。我尝试了你的代码(应用了很多修复。你应该在下次正确运行示例)。它完美地运作。这是它
abstract class AbstractClass {
public abstract void foo();
public void addValue(int a, int b) {
foo();
}
}
class ClassUnderTest {
private AbstractClass obj;
public ClassUnderTest(AbstractClass obj) {
this.obj = obj;
}
public void methodToTest(){
obj.addValue(1, 2); // Calls the method.
}
}
@RunWith(EasyMockRunner.class)
public class TestFile {
@Mock
private AbstractClass concrete;
@Test
public void testMethod() {
// concrete = EasyMock.createMock(AbstractClass.class);
concrete.addValue(1,2);
EasyMock.replay();
new ClassUnderTest(concrete).methodToTest();
EasyMock.verify(); // The code under scan.
}
}
要非常清楚。这4个意思是完全相同的事情:
// 1. Calling once the void method
concrete.addValue(1,2);
// 2. Calling once the void method and then using expectLastCall()
concrete.addValue(1,2);
expectLastCall();
// 3. Calling once the void method and then expect once
concrete.addValue(1,2);
expectLastCall().once();
// 4. Calling once the void method and then expect one time
concrete.addValue(1,2);
expectLastCall().time(1);