PowerMockito在模拟枚举的静态方法并在switch语句中使用该枚举对象时抛出异常

时间:2016-05-18 10:45:17

标签: junit mockito

我有一个enum MyEnum.java,它有一个static方法。

//MyEnum.java

enum MyEnum {

  ONE("one"),
  TWO("two");

  private String value;
  MyEnum(String value){
    this.value=value;
  }

  public static MyEnum getMyEnum(String value){
    for(MyEnum myEnum : MyEnum.values()){
      if(myEnum.value.equalsIgnoreCase(value))
      return myEnum;
    }
    return null;
  }
}

我正在使用PowerMock来模拟此static的{​​{1}}种方法。我已经包含了所有必要的条件,比如

enum

一切正常。但是如果我使用switch方法作为枚举对象,那么它会抛出异常。

@Runwith(PowerMockRunner.class)
@PrepareForTest(MyEnum.class)

//Test function
PowerMockito.mockStatic(MyEnum.class);

此代码抛出以下异常。

MyEnum enum = MyEnum.ONE;
switch(enum){
case ONE:
break
}

即使从日志中也不清楚,导致此异常的原因是什么?其他人之前遇到过类似的问题吗?

1 个答案:

答案 0 :(得分:0)

我的建议:使用PowerMock考虑

PowerMock看起来像许多问题的解决方案;但不久之后,它可能是更多问题的原因。它打破了覆盖范围,使得更改底层JVM变得更加困难,等等。

说真的:如果您的设计只能使用PowerMock进行测试,这通常表明您的设计糟糕。所以:专注于重新测试你的代码!

在你的情况下:我会开始质疑是否需要在枚举上使用静态方法。因此,换句话说:您希望使用此代码解决的问题是什么?

但要回答实际问题:你必须明白枚举常量本身就是内部类。因此,您必须为@PrepareForTest使用 fullyQualifiedName 属性。有关示例,请参阅此较新的question