如果单元测试(在单独的包中)需要来自类的私有静态最终值X,那么应如何获取X?我可以想到三个选项,其中没有一个看起来很干净:
1)将X复制到测试类中。我担心如果更改了源X的X,而保留了测试的X,那么单元测试在失败时仍会通过。
2)公开X.我担心这打破了封装。尽管如此,鉴于X是最终的,我认为这是最好的选择。
3)为X创建一个公共getter。如果只能从类和单元测试中访问X,这似乎也打破了封装。
答案 0 :(得分:9)
我会说你不需要访问它。如果某些内容是私有的,那么它将用作实现细节,并且应该对测试不可见。您应该测试类的要求,而不是实现细节。你为什么问?因为随着时间的推移,植入可能会改变(或进化),而要求应该是一致的。
答案 1 :(得分:1)
我会选择你的第三个选项。
我将在测试类中创建一个私有静态final变量,并使用getter分配它,获取所需的私有静态最终值的值。这样,您在测试类中的值将具有与原始值类似的属性。
我希望这会有所帮助。
答案 2 :(得分:0)
您始终可以通过反射访问您的私人方法和字段。
Field X = MyClass.class.Getdeclaredfield("X");
然后,当您的字段为静态时,您可以使用getXX
类的Field
方法之一获取其值。例如:
Object o = X.get(null);