1

tl; dr:我如何在运行时 - 出于测试目的 - 将另一个元素添加到枚举中?我确信必须使用一些字节操作库,例如 PowerMockito 的工作方式等。我不认为这是“我可以在 Java 运行时添加和删除枚举元素”的副本,因为我愿意忍受您不会在生产代码中进行的那种字节操作或类加载器黑客攻击,因为它是用于测试的。


我正在编写 Java 单元测试并运行单元测试覆盖率报告。我无法到达的唯一行是在代码中,我在语句中有一个default案例,其中所有枚举都包含在案例中。switchenum

枚举宠物{猫,狗;}

然后像这样的代码

final String speak;
switch( myPet ){
    case CAT:
        speak = "meow";
        break;

    case DOG:
        speak = "ruff";
        break;

    default:
        throw new IllegalArgumentException( "should not get here" );
}
System.out.println( speak );

需要default声明,否则会javac抱怨正在使用的最后一行speak可能未初始化。

但是,我无法覆盖该行,因为没有其他值,并且我不想为测试目的向生产代码添加额外的枚举值。

4

1 回答 1

1

除了您找到的可以使用 PowerMock 进行测试的答案之外(对于它会出现的测试顺序有一些限制),您还可以通过另一种方式来解决这个问题,即进行一个证明代码无法访问的测试。

即进行一个测试,迭代枚举的所有可能值,并且没有抛出异常并适当地设置说话。

这将捕获修改枚举并添加新值而不更新开关的情况。

于 2013-08-22T21:16:14.243 回答