【问题标题】:Test Config class with multiple private final fields具有多个私有最终字段的测试配置类
【发布时间】:2018-12-07 16:51:22
【问题描述】:

您如何建议“修复”此类以进行更好的测试?

public class Config {
    private final ComplexA complexA;
    private final ComplexB complexB;
    (...)

    Config(String[] args) {
         complexA = privateMethodCalculatesA(args);
         complexB = privateMethodCalculatesB(args);
         (...)
    }
}

现在,如果用户使用 System.exit 插入不存在或错误的参数,所有计算 complexA/B/... 的方法都旨在快速失败。这里的问题是Config 被应该单独测试的方法弄乱了。

尽管如此,同样的方法不应该公开,结果应该被缓存,因为计算可能很昂贵。

只是击中子弹并声明上述方法static protected并单独测试它们?

这样做的正确方法是什么?

【问题讨论】:

  • @user7294900 谢谢!它很有用,并且已经在其他测试中使用,但在这个特定场景中,当初始化 Config 时,我会模拟很多私有方法来抑制它们。新变量意味着构造函数上有更多私有方法,这会使以前的测试无效。这真的比在这些方法上使用static protected 更明智吗?感谢您的宝贵时间。
  • 我不确定更改测试代码是否更好,但这取决于

标签: java unit-testing design-patterns


【解决方案1】:

考虑将ComplexAComplexB 等分离到它们自己的类中。这解决了独立测试问题。然后你面临着将碎片收集成一个整体的问题。对于该问题,您可能更喜欢组合而不是继承;但任何一种方法都可能奏效。

【讨论】:

  • 是的,我想这会解决它。谢谢!不知道为什么我会拒绝最直接的路径。
猜你喜欢
  • 2012-09-29
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2017-01-29
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多