我有以下类,在构造函数中,我调用另一个构造函数来构建该类的字段:
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(以及文档)中搜索了其他示例,但似乎应该这样做。我忘记/做错了什么?
最佳答案
这确实是一个简单的错误。如果类ClassIWantToMock
在ClassIWantToTest
中初始化,则ClassIWantToTest
也应准备进行测试。
我替换了这个:
@PrepareForTest(ClassIWantToMock.class)
有了这个:
@PrepareForTest({ClassIWantToTest.class,ClassIWantToMock.class})
...而且效果很好。