【问题标题】:How to unit test a method in an enum that might change如何对可能更改的枚举中的方法进行单元测试
【发布时间】:2017-09-14 10:42:52
【问题描述】:

所以我有一个自动生成的枚举,其中每个枚举包含几个字段,我希望测试枚举中包含的方法的一些逻辑。示例可以是“在此字段中查找具有此值的所有枚举”。然而,枚举可能会改变,更具体地说,枚举元素的值和数量,但不是每个枚举中的字段数。这还包括模拟 values() 方法的可能性。

现在我担心如果我使用特定值进行测试,如果枚举中不再存在这些值,这些测试可能会失败。

所以我的选择是:将元素添加到我可能在测试中使用的现有枚举中,或者使用我可以在测试中使用的新值模拟整个枚举。

现在我的问题是什么是好的做法?我已经阅读了有关 powermock 的信息,但是对此似乎有不同的看法。有更好的解决方案吗?我看错了吗?

【问题讨论】:

    标签: java unit-testing enums mocking powermock


    【解决方案1】:

    可以轻松回答的部分:这里不需要模拟框架。

    你有一些内容的枚举——当你想测试它们的内部时,模拟框架是没有用的。当您的目标是测试这些生成的枚举的某些属性时,mockingvalues() 毫无意义。

    换句话说:您的测试用例应该归结为获取值的代码,然后以某种方式asserts() 在它们上面添加一些东西。最坏的情况,你可能不得不使用 reflection,如:

    • 以某种方式收集所有枚举类的名称进行测试(例如可以通过扫描类路径内容来实现)
    • 对于每个此类枚举 - 可能使用反射来获取某些字段 - 然后针对预期结果进行断言。

    但很可能,真正的答案是完全不同的:首先对生成的代码进行单元测试是错误的。而是使用单元测试来验证 代码生成器

    您看 - 当您的单元测试在生成的枚举中发现问题时?你会怎么做......可能会改变你的生成器

    【讨论】:

    • 我正在尝试测试枚举中的方法,而不是值本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多