我想在模拟时以不同方式初始化类的静态最终变量。有没有办法做到这一点?
类似的东西:
public class Test {
private static final Integer a = getA();
private static Integer getA() {
if(mocked) {
return x;
} else {
return y;
}
}
答案 0 :(得分:1)
我认为这是一个坏主意(因为你不应该检查你的实例是否被嘲笑我认为这会破坏模拟的目的),但你当前的方法看起来几乎正确。我假设您要指定getA()
返回int
。
private static int getA() {
}
当然,你的方法本身似乎毫无意义 - 在这种情况下,你可能会使用Conditional Operator ? :
之类的
private static final Integer a = mocked ? x : y;
答案 1 :(得分:0)
这就是静力学不利于单元测试的原因。最好的解决方案是将静态转换为实例方法,然后添加一些间接,以便您的单元测试可以模拟/实现/覆盖该方法。唯一的另一种选择是使用反射来强制覆盖单元测试中的值,这显然更脆弱(并且在同一进程/类加载器中运行许多单元测试是不利的。)