繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM