PowerMockito不会模拟在测试的类中调用的新实例

时间:2019-06-18 09:46:10

标签: java junit mocking powermock

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

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(和文档)中搜索了其他示例,但似乎应该这样做。我忘记/做错了什么?

1 个答案:

答案 0 :(得分:0)

这确实是一个简单的错误。如果类ClassIWantToMock是在ClassIWantToTest内部初始化的,那么ClassIWantToTest也应该准备进行测试。

我替换为:

@PrepareForTest(ClassIWantToMock.class)

与此:

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

...而且效果很好。