出于测试目的,如何在运行时向枚举添加其他元素?

时间:2013-08-22 20:01:22

标签: java unit-testing enums classloader bytecode-manipulation

tl; dr:我如何在运行时(为了测试目的)在枚举中添加另一个元素?我确定必须使用一些字节操作库,比如PowerMockito的工作原理等等。我认为这是"Can I add and remove elements of enumeration at runtime in Java"的副本,因为我愿意忍受这种类型在生产代码中你不会做的字节操作或类加载器黑客攻击,因为它是用于测试的。


我正在编写Java单元测试并运行单元测试覆盖率报告。我无法访问的唯一行是在代码中,default语句switch包含enum语句,其中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 ); 所有枚举都包含在案例中。< / p>

  

enum Pet {CAT,DOG; }

然后编码

default

需要javac语句或speak会抱怨最后一行使用的{{1}}可能未初始化。

但是,由于没有其他值,我无法覆盖该行,并且我不希望为测试生成生成代码添加额外的枚举值。

1 个答案:

答案 0 :(得分:0)

除了您找到的答案之外,您可以使用PowerMock对其进行测试(对于测试顺序会有一些限制),您还可以通过其他方式进行测试以证明代码无法到达。

即。进行测试,迭代枚举的所有可能值,并且不会抛出任何异常并正确地说出设置。

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