Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个私有最终字段的测试配置类_Java_Unit Testing_Design Patterns - Fatal编程技术网

Java 具有多个私有最终字段的测试配置类

Java 具有多个私有最终字段的测试配置类,java,unit-testing,design-patterns,Java,Unit Testing,Design Patterns,您如何建议“修复”这个类以更好地进行测试 public class Config { private final ComplexA complexA; private final ComplexB complexB; (...) Config(String[] args) { complexA = privateMethodCalculatesA(args); complexB = privateMethodCalculate

您如何建议“修复”这个类以更好地进行测试

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

    Config(String[] args) {
         complexA = privateMethodCalculatesA(args);
         complexB = privateMethodCalculatesB(args);
         (...)
    }
}
现在,如果用户在
系统中插入不存在或错误的参数,那么所有计算
complexA/B/…
的方法都会很快失败。退出
。这里的问题是
Config
被应该单独测试的方法弄乱了

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

直接声明所述方法受静态保护,并单独测试它们


正确的方法是什么?

考虑将
ComplexA
ComplexB
等分离到各自的类中。这就解决了独立测试的问题。然后你就面临着把碎片收集成一个整体的问题。在这个问题上,你可能更喜欢组合而不是继承;但这两种方法都可能奏效。

请参见@user7294900 thks!它很有用,并且已经在其他测试中使用,但是在这个特定的场景中,当初始化
Config
时,我会模拟很多私有方法来抑制它们。新的变量将意味着构造函数上有更多的私有方法,这将使以前的测试无效。这真的比在这些方法上使用
静态保护
更明智吗?谢谢您的时间。我不确定为测试更改代码是否更好,但这取决于系统,我想这会解决问题。谢谢我不知道为什么我要抵制最直截了当的道路。