5

我只是写了一些简单的示例代码来确保我正确安装了 EclEmma。我没有得到 100% 的覆盖率,我不明白为什么。突出显示意味着它与类名有关。这是我的代码,带有相应的 JUnit 测试,EclEmma 突出显示它的方式:

算术课

算术类测试

覆盖结果表明,三个指令Arithmetic没有受到影响,即使这两种实际方法似乎都被完全覆盖:

覆盖信息

我已经阅读了有关基本块覆盖的 EclEmma 文档,但我仍然感到困惑。我不确定错过了哪些基本块。起初,我认为 EclEmma 可能只是忽略了类的字节码,但ArithmeticTest似乎处理得很好。

我有两个密切相关的问题:

  1. 这是否表明我安装/配置 EclEmma 的方式存在问题?
  2. 完全覆盖的代码具有高但不是完全 100% 的 EMMA 覆盖率是否正常/可接受,如果是,它是如何工作的?
4

3 回答 3

10

您的代码暗示了一个默认构造函数,Emma 无法正确标记该构造函数,因为它没有文本块。

由于它没有在文本块中正确标记,Emma 无法将覆盖日志与文本文件相关联,并且看起来有些代码没有被覆盖;因为,您运行了一些字节码,但无法注册行日志记录。稍后当报告元素读取行日志时,他们找不到默认构造函数的行号,并且它在唯一有意义的地方突出显示错误,即类声明行。

默认构造函数看起来像

public Arithmetic() {
  super();
}

其中 super 是将构造的隐含的第一条指令Object。虽然您可能会忽略它的存在,但编译器会为您添加它。那就是你得到“3行”而不是1行的地方。

于 2012-06-08T15:31:07.147 回答
4

我认为您要么需要测试实例化Arithmetic,要么声明其构造函数private以禁止实例化

于 2012-06-08T15:30:43.110 回答
2

IIRC,您需要实例化该类的一个实例来练习语言提供的构造函数。

于 2012-06-08T15:30:27.693 回答