所以我有一个要测试的类,它有一个构造函数 -
public class IdRunnable{
public IdRunnable(Node root) {
this.saHandler = new Handler(root);
}
public void call(){
//Somes codes
}
}
我在调用new运算符时使用Powermock框架注入模拟对象。测试类是 -
@RunWith(PowerMockRunner.class)
@PrepareForTest({IdRunnable.class,Handler.class})
public class IdRunnableTest {
private IdRunnable runnable;
@BeforeClass
public void oneTimeSetUp(){
Node root = new Node();
Handler handler = mock(Handler.class);
whenNew(Handler.class).withArguments(root).thenReturn(handler);
runnable = new IdRunnable(root);
}
@Test(groups = {TestGroup.UNIT_TESTS})
public void testCall(){
runnable.call();
}
}
当我运行测试时,我可以看到,而不是在IdRunnable的构造函数中模拟新语句它继续创建真正的处理程序对象。 不知何故代码 -
whenNew(Handler.class).withArguments(root).thenReturn(handler);
对我不起作用。任何人都可以建议代码有什么问题。
感谢。
答案 0 :(得分:1)
当然这是可能的;但这种浪费能源。
只是做:
public IdRunnable(Node root) {
this(new Handler(root);
}
IdRunnable(Handler saHandler) {
this.saHandler = saHandler;
}
你的“需要”转向PowerMock就消失了。是的,不是需要 PowerMock是一件好事。因为现在您可以使用允许您注入需要模拟的对象的构造函数。
因为这意味着您更喜欢编写可测试的代码。根据我的经验: