完全覆盖的代码的EclEmma覆盖率是否低于100%?
我刚写了一些简单的示例代码,以确保我正确安装了EclEmma。 我没有得到100%的报道,我不明白为什么。 突出显示它与类名有关。 这是我的代码,以及相应的JUnit测试,EclEmma强调它的方式:
覆盖结果显示Arithmetic
中的三个指令没有被击中,即使两个实际方法似乎都被完全覆盖:
我已经阅读了关于基本块覆盖的EclEmma文档 ,但我仍然感到困惑。 我不确定哪些基本块被遗漏了。 起初,我认为EclEmma可能只是忽略了类的字节码,但ArithmeticTest
似乎处理得很好。
我有两个密切相关的问题:
- 这是否表示我安装/配置EclEmma的方式有问题?
- 完全覆盖的代码具有高但不是100%的EMMA覆盖率是正常/可接受的,如果是这样,它是如何工作的?
您的代码意味着默认构造函数,Emma无法正确标记它,因为它没有文本块。
由于它没有在文本块中正确标记,因此Emma无法将coverage记录与文本文件相关联,并且看起来某些代码未被覆盖; 因为,您运行了一些字节码,但无法注册行记录。 稍后当报告元素读取行日志记录时,它们无法找到默认构造函数的行号,并且它会突出显示唯一有意义的地方的错误,即类声明行。
默认构造函数如下
public Arithmetic() { super(); }
super是隐含的第一条构造Object
指令。 虽然您可以省略它的存在,但编译器会为您添加它。 这就是你得到“3行”而不是一行的地方。
我想你要么也需要测试Arithmetic
的实例化,要么声明它的构造函数是private
以禁止实例化
IIRC,您需要实例化该类的实例以使用语言提供的构造函数。