如何使用构建器模拟内部变量

时间:2019-04-25 16:54:55

标签: java unit-testing powermock powermockito

我正在编写单元测试,并且遇到构建器问题:  这是要测试的课程:

public class ToBeTest() {
    public void enact(SomeInput input){
        Session s = Session.builder().attributeA(input.getA()).build();
        s.attributeB("someValue");
    }
}

如何编写测试以验证会话S是否成功设置了字段A和B?谢谢!

1 个答案:

答案 0 :(得分:2)

基本上,您可以在以下两个方面进行验证:

  • input.getA():模拟您提供给被测代码的SomeInput实例,然后可以稍后验证该模拟对象!
  • Session.builder()最有可能是静态调用,因此请使用 static 模拟提供模拟的构建器对象,您也可以在以后进行验证。请参阅官方documentation,了解执行此操作所需的步骤。

已经说过:您的真正问题是您编写了“难以测试的代码”。惊喜,这使得测试变得困难。您会看到,首先放置“本地方法”的Sessions变量有什么意义。如果该方法将返回s,则可以检查它是否具有某些属性。或者,如果s是该类的字段,则可以进行 other 检查,以确保构建了正确配置的Session。

长话短说:PowerMock(ito)提供了此代码所需的功能。阅读一些好的教程,您应该不会有太多问题。 但是值得的是,还应该投资改进被测代码以使其更易于测试。我的经验法则是:当您需要PowerMock(ito)来测试代码时,应该改进生产代码。