【发布时间】:2016-07-21 10:58:08
【问题描述】:
我有一个要测试的类是这样的:
public class MainClass extends BaseClass {
public static int variableToBeAsserted= 0;
MainClass(ConfigClass config) {
super(config);
}
public void myMethod() {
List list = objectOfClass1inSuperClass.operation(objectOfClass2inSuperClass.method())
while(methodInSuperClass()) {
// doing operations with 'list'
variableToBeAsserted++;
}
}
// ..few other methods which I am not going to test.
}
我已经取消了 BaseClass 和 ConfigClass 的构造函数。现在我的测试类是这样的:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MainClass.class)
public class TestClass {
@Before
public void setUp(){
suppress(constructor(BaseClass.class))
suppress(constructor(ConfigClass.class))
}
@Test
public void testMyMethod(){
MainClass main = new MainClass(new ConfigClass(""));
List list1= new ArrayList();
test1.add("somevalues");
Class1inSuperClass ob1 = PowerMock.createMock(Class1inSuperClass.class);
Class2inSuperClass ob2 = PowerMock.createMock(Class2inSuperClass.class);
EasyMock.expect(ob2.method()).andReturn(getClass());
EasyMock.expect(ob1.operation(getClass())).andReturn(list1);
PowerMock.replayAll();
main.myMethod();
Assert.assertEquals(expectedValue, main.variableToBeAsserted);
}
}
现在我不知道为什么,但我的测试用例失败并显示 NullPointerException。
它尝试访问objectofClass1inSuperClass 并失败。我以为这会嘲笑它。但它不会被嘲笑。
编辑:我只写测试,我无法更改 BaseClass 中的任何内容。不过我可以选择修改MainClass。
【问题讨论】:
-
如果我错了,请纠正我。这就是我对您的情况的理解:在
BaseClass的构造函数中,objectOfClass1inSuperClass和objectOfClass2inSuperClass字段被初始化。您抑制构造函数BaseClass以避免这种行为。但是为什么要压制ConfigClassconstructor?我还看到您创建了模拟,但从不注入/设置它。 -
即使
configClass构造函数也会初始化一些我不想使用的类。因此,我正在压制它。是的,这就是我想知道的。如何在我的实际对象中注入模拟
标签: java unit-testing powermock easymock