0

这是我在 Stackoverflow 上的第一篇文章,到目前为止,我一直是这个论坛的活跃读者,我在这里发布我的第一个问题。

这是关于 EasyMock 的使用,我是 EasyMock 的新用户,在下面的示例代码中,我设置了一个协作者方法的期望值,该方法具有相同的返回对象(不管它是相同的对象还是不同的对象,但结果相同)并且我在退出测试方法之前正在重置。但是当执行第二个测试时,模拟方法返回 null,我不确定为什么会这样。

如果我运行这些方法

@RunWith(PowerMockRunner.class)
@PrepareForTest({CollaboratorWithMethod.class, ClassTobeTested.class})
public class TestClassTobeTested {

private TestId testId = new TestId();

 @Test
public void testMethodtoBeTested() throws Exception{
    CollaboratorWithMethod mockCollaborator = EasyMock.createMock(CollaboratorWithMethod.class);
    PowerMock.expectNew(CollaboratorWithMethod.class).andReturn(mockCollaborator);
    EasyMock.expect(mockCollaborator.testMethod("test")).andReturn(testId);
    PowerMock.replay(CollaboratorWithMethod.class);
    EasyMock.replay(mockCollaborator);
    ClassTobeTested testObj = new ClassTobeTested();
    try {
        testObj.methodToBeTested(); 
    } finally {
        EasyMock.reset(mockCollaborator);
        PowerMock.reset(CollaboratorWithMethod.class);
    }
}  

@Test
public void testMothedtoBeTestWithException() throws Exception {
    CollaboratorWithMethod mockCollaborator = EasyMock.createMock(CollaboratorWithMethod.class);
    PowerMock.expectNew(CollaboratorWithMethod.class).andReturn(mockCollaborator);
    EasyMock.expect(mockCollaborator.testMethod("test")).andReturn(testId);
    PowerMock.replay(CollaboratorWithMethod.class);
    EasyMock.replay(mockCollaborator);
    ClassTobeTested testObj = new ClassTobeTested();
    try {
        testObj.methodToBeTested();
    } finally {
        EasyMock.reset(mockCollaborator);
        PowerMock.reset(CollaboratorWithMethod.class);
    }
}

}

这是我的合作者课程

public class CollaboratorWithMethod {
   public TestId testMethod(String text) throws IllegalStateException {
     if (text != null) {
        return new TestId();
     } else {
        throw new IllegalStateException();
     }
  }
}

这是我正在测试的课程

public class ClassTobeTested {

public static final CollaboratorWithMethod collaborator = new CollaboratorWithMethod();

public void methodToBeTested () throws IOException{
    try {
        TestId testid = collaborator.testMethod("test");
        System.out.println("Testid returned "+ testid);
    } catch (IllegalStateException e) {
        throw new IOException();
    }
}
}

我正在寻求你们的帮助,以了解这里到底发生了什么

4

1 回答 1

0

类中的collaborator变量ClassTobeTested是最终的。第一个测试用例用模拟对象初始化变量。第二个测试用例无法再次初始化变量。您在第二个测试用例中创建的模拟对象上设置了期望,但实际上该变量仍然指的是第一个模拟对象。

由于您不想修改类,您应该使用@BeforeClass 设置一次模拟引用并将“mockCollaborator”设置为全局变量,以便您可以在多个测试用例中使用该引用。

于 2013-04-16T07:32:22.443 回答