[英]Verify a void method was called inside a private method with EasyMock/PowerMock
我有一个看起来像这样的方法(简化)
private boolean x = someMethodToSetTheValueOfX();
private void method(args){
if(x){
method1();
}else{
method2();
}
}
我想写一个单元测试来保证当 x 为真时,method1 被调用。 我知道我可以使用 PowerMock 的 Whitebox 来设置 x 的值并调用该方法,但是如何确认调用了 method1() 呢? 请注意,method1() 是无效的。
除了 EasyMock/PowerMock 之外,我不允许使用其他框架(如 Mockito)。
您可以使用:
System.out.println("method one was called");
如果您可以在 Eclipse 等 IDE 中打印到控制台,或使用:
JOptionPane.showMessageDialogue(null, "method one was called");
并将它们放入 method1
你弄错了; 这不是你应该如何设计你的测试。
首先:小心使用 PowerMock...框架。 它们依赖于字节码操作; 迟早会招来麻烦。 用户 PowerMock(ito) 的唯一合理情况是您必须测试遗留的生产代码。 在任何其他情况下:更改您的生产代码,以便可以轻松测试。
然后:不要以这种方式测试您的代码!
您使用模拟框架来创建/控制传递给“被测类”的那些对象。 您不使用框架直接测试您的“被测类”! 更具体地说:您不想编写知道私有方法的测试代码 - 这些是实现细节。
你做什么:
a) 如前所述,您可以使用模拟将对象传递到您的测试类中。 然后你可以控制/验证那些模拟看到你期望你的“被测类”进行的调用。 因此,最坏的情况是,您可以将 method1/2 放在不同的对象上; 然后您可以使用模拟/验证来检查它们是否按预期调用。
b)您创建“被测类”的对象……然后对这些对象的属性进行“断言”; 或方法调用返回的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.