我有一个 枚举开关或多或少像这样:
public static enum MyEnum {A, B}
public int foo(MyEnum value) {
switch(value) {
case(A): return calculateSomething();
case(B): return calculateSomethingElse();
}
throw new IllegalArgumentException("Do not know how to handle " + value);
}
我希望测试覆盖所有的行,但是由于代码需要处理所有的可能性,因此如果开关中没有相应的 case 语句,我就不能提供一个值。
扩展枚举来添加额外的值是不可能的,而且仅仅模仿 equals 方法来返回 false
也不会起作用,因为生成的字节码使用窗帘后面的一个跳转表来进入正确的大小写... ... 所以我想也许 PowerMock 或者其他什么东西可以实现一些黑魔法。
谢谢!
编辑 :
因为我拥有这个枚举,所以我认为我可以向这些值添加一个方法,从而完全避免开关问题; 但是我留下了这个问题,因为它仍然很有趣。