在mock中初始化静态final变量

时间:2015-05-05 02:40:12

标签: java mocking mockito powermockito

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

类似的东西:

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

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

2 个答案:

答案 0 :(得分:1)

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

private static int getA() {
}

当然,你的方法本身似乎毫无意义 - 在这种情况下,你可能会使用Conditional Operator ? :之类的

private static final Integer a = mocked ? x : y;

答案 1 :(得分:0)

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