【问题标题】:How to get full Emma coverage report on enum singletons?如何获得有关枚举单例的完整 Emma 覆盖率报告?
【发布时间】:2011-10-25 03:53:47
【问题描述】:

在 Java 中可以通过枚举来保证对象的唯一实例,如下所示:

public enum EmmaTest {

    ;

    public static int someStaticMethod() {
        return 33;
    }

}

如何对此类对象实现 100% 的 Emma 测试覆盖率?可能吗?或者是否可以告诉 Emma 忽略某些方法?

我能得到的最好的是:

【问题讨论】:

  • enum 缺乏特殊处理似乎是 Emma 应该纠正的缺陷。但是,100% 的测试覆盖率可能会适得其反。
  • 与其说是我感兴趣的 100%,不如说是我想在报告中去掉的红色。

标签: java unit-testing enums emma


【解决方案1】:

将下面的行添加到任何测试中为我修复了代码覆盖率:

MyEnum.valueOf(MyEnum.VALUE.toString());

显然,关于此值的争论与实际解决方案不同。由于未调用枚举的构造函数,我也有 100% 覆盖率的要求。将以上内容添加到测试中解决了我没有任何聪明的反思等...

【讨论】:

    【解决方案2】:

    您的 EmmaTest 不是单例。 EmmaTest 的实例为 0,所以它的构造函数从来没有被使用过,也没有办法用有效值调用 valueOf。

    顺便说一句:你真的担心 valueOf 或默认构造函数可能有错误吗?为什么要 100% 的覆盖率?

    【讨论】:

    • 好的,所以你是说不可能获得 100% 的测试覆盖率,因为没有办法创建枚举的实例?
    • 我不害怕 valueOf 中的错误,只是 Emma 将其报告为未经测试且无法测试。现在,我可以创建一个虚拟枚举值作为解决方法。我想知道是否有更好的解决方案。
    • 我认为您正在歪曲枚举概念以制作静态实用程序类。我会为此使用带有私有构造函数的常规类。私有构造函数也永远不会被调用,但代码会更简洁,恕我直言。
    • 我同意,这不完全是单例。我正在进一步推动stackoverflow.com/questions/70689/… 中描述的概念。我可以在枚举中定义静态变量来模仿单例(我在 OP 中没有)。当然,这样做我失去了对 synchronized() 的使用。
    • 我已经设法用一个虚拟枚举值解决了我的问题。感谢您的澄清。
    猜你喜欢
    • 2011-05-29
    • 2015-05-10
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多