使用EasyMock / PowerMock验证在私有方法中调用void方法

时间:2016-06-08 15:10:43

标签: java mocking powermock easymock

我有一个看起来像这样的方法(简化)

private boolean x = someMethodToSetTheValueOfX();

private void method(args){
        if(x){
             method1();
        }else{
             method2();
        }
}

我想写一个单元测试来保证当x为真时,调用method1。我知道我可以使用PowerMock的Whitebox来设置x的值并调用方法,但是如何确认是否调用了method1()?请注意,method1()是无效的。

除EasyMock / PowerMock外,我不允许使用其他框架(如Mockito)。

2 个答案:

答案 0 :(得分:1)

你错了;这不是你应该如何设计你的测试。

首先:请不要使用任何PowerMock ...框架。他们依赖于字节码操作;而且迟早会要求麻烦。相信我,我花了很多时间寻找真正奇怪的错误,没有充分的理由。

然后:不要这样测试你的代码!

您使用模拟框架来创建/控制您传递给正在测试的"类的对象"。您没有使用该框架来直接测试您正在测试的课程#34;!更具体地说:您不想编写知道私有方法的测试代码 - 这些是实现细节。

你做了什么:

a)如上所述,您可以使用模拟将对象传递到您正在测试的类中。然后你可以控制/验证那些模拟看到你期望你正在测试的课程#34;制作。所以,最坏的情况是,你可以将method1 / 2放在不同的对象上;然后你可以使用mock / verify来检查它们是否按预期调用。

b)你创建了你所测试的"类的对象" ......然后"断言"关于那些对象的属性;或者在方法调用返回的结果上。

答案 1 :(得分:1)

您可以使用:

System.out.println("method one was called"); 

如果你可以像eclipse一样在IDE中打印,或者使用:

JOptionPane.showMessageDialogue(null, "method one was called");

并将它们放在method1