所以我有一个自动生成的枚举,其中每个枚举都包含多个字段,我希望测试枚举中包含的方法的一些逻辑。示例可以是"在此字段中查找具有此值的所有枚举"。但是,枚举可能会更改枚举元素的值和数量,但不能更改每个枚举中的字段数。这也包括模拟 values() 方法的可能性。
现在我担心如果我使用特定值进行测试,如果枚举中不再存在这些值,这些测试可能会失败。
所以我的选择是:将元素添加到现有枚举中,然后我可以在测试中使用,或者使用我可以在测试中使用的新值模拟整个枚举。
现在我的问题是,什么是良好做法?我读过关于 powermock 的文章,但它似乎对此有不同的看法。有什么更好的解决方案吗?我看错了吗?
很容易回答的部分:这里不需要模拟框架。
你有一些内容的枚举 - 当你想测试它们的内部时,模拟框架是没有用的。当您的目标是测试这些生成的枚举的某些属性时,mocking
values()
是没有意义的。
换句话说:你的测试用例应该归结为获取值的代码,然后以某种方式asserts()
一些东西。最坏的情况是,您可能必须使用反射,如下所示:
- 以某种方式收集所有要测试的枚举类的名称(例如,可以通过扫描类路径内容来实现)
- 对于每个这样的枚举 - 也许使用反射来获取某些字段 - 然后根据预期结果断言。
但最有可能的是,真正的答案是完全不同的:首先对生成的代码进行单元测试是错误的。而是使用单元测试来验证代码生成器。
你看 - 当你的单元测试在生成的枚举中发现问题时?你会怎么做...可能会更换您的发电机。