完全覆盖的代码的EclEmma覆盖率是否低于100%?

时间:2012-06-08 15:27:19

标签: java eclipse code-coverage emma eclemma

我刚写了一些简单的示例代码,以确保我正确安装了EclEmma。我没有得到100%的报道,我不明白为什么。突出显示它与类名有关。这是我的代码,带有相应的JUnit测试,EclEmma强调它的方式:

Arithmetic class

Tests for Arithmetic class

覆盖率结果显示Arithmetic中的三条指令没有受到影响,即使两种实际方法似乎完全被覆盖:

Coverage information

我读过the EclEmma documentation about basic block coverage,但我仍然感到困惑。我不确定错过了哪些基本块。起初,我认为EclEmma可能只是忽略了类的字节码,但ArithmeticTest似乎处理得很好。

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

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

3 个答案:

答案 0 :(得分:9)

您的代码意味着默认构造函数,Emma无法正确标记它,因为它没有文本块。

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

默认构造函数类似于

public Arithmetic() {
  super();
}

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

IIRC,你需要实例化一个类的实例来运用语言提供的构造函数。