0

我想在模拟时以不同的方式初始化一个类的静态最终变量,而当它不是模拟时。有没有办法做到这一点?

就像是 :

public class Test {    
   private static final Integer a = getA();

   private static Integer getA() {
      if(mocked) {
         return x;
      } else {
         return y;
      }
}
4

2 回答 2

1

我认为这是一个坏主意(因为您不应该检查您的实例是否被模拟,我认为这会破坏模拟的目的),但是您当前的方法看起来几乎是正确的。我假设您想指定getA()返回int

private static int getA() {
}

当然,您的方法本身似乎毫无意义 - 在这种情况下,您可以使用条件运算符? :,例如

private static final Integer a = mocked ? x : y;
于 2015-05-05T02:44:26.717 回答
0

这就是为什么静态不利于单元测试的原因。最好的解决方案是将静态转换为实例方法,然后添加一些间接方法,以便您的单元测试可以模拟/实现/覆盖该方法。唯一的其他选择是使用反射来强制覆盖单元测试中的值,这显然更脆弱(并且不利于在同一进程/类加载器中运行许多单元测试)。

于 2015-05-05T05:26:57.783 回答