我有以下类,在构造函数中,我调用另一个构造函数来构建该类的字段:

public class ClassIWantToTest {
    private ClassIWantToMock anotherClass;
    public ClassIWantToTest() {
        //some stuff
        anotherClass = new ClassIWantToMock(); //<-- call constructor to build the field
        //some other stuff
    }
}


当我测试类ClassIWantToTest时,我想模拟ClassIWantToMock的实例。

因此,我将测试设置如下:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassIWantToMock.class)
public class ClassIWantToTest_Test {
    @Test
    public void myFirstTest() {
        ClassIWantToMock myMock = PowerMockito.mock(ClassIWantToMock.class);
        PowerMockito.whenNew(ClassIWantToMock.class).withAnyArguments().thenReturn(myMock);
        ClassIWantToTest test = new ClassIWantToTest(); //<-- not mocked
    }
}


但是,在测试的最后一行代码中(我在要测试的类中创建一个new),仍会调用ClassIWantToMock的构造函数。

我已经在Stack Overflow(以及文档)中搜索了其他示例,但似乎应该这样做。我忘记/做错了什么?

最佳答案

这确实是一个简单的错误。如果类ClassIWantToMockClassIWantToTest中初始化,则ClassIWantToTest也应准备进行测试。

我替换了这个:

@PrepareForTest(ClassIWantToMock.class)


有了这个:

@PrepareForTest({ClassIWantToTest.class,ClassIWantToMock.class})


...而且效果很好。

10-08 18:30