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