Java 完全覆盖代码的EclEmma覆盖率是否可以低于100%?
我只是编写了一些简单的示例代码,以确保正确安装了EclEmma。我没有得到100%的保险,我不明白为什么。突出显示意味着它与类名有关。以下是我的代码,以及相应的JUnit测试,就像EclEmma突出显示的那样: 覆盖率结果显示,Java 完全覆盖代码的EclEmma覆盖率是否可以低于100%?,java,eclipse,code-coverage,emma,eclemma,Java,Eclipse,Code Coverage,Emma,Eclemma,我只是编写了一些简单的示例代码,以确保正确安装了EclEmma。我没有得到100%的保险,我不明白为什么。突出显示意味着它与类名有关。以下是我的代码,以及相应的JUnit测试,就像EclEmma突出显示的那样: 覆盖率结果显示,算术中的三条指令没有被命中,尽管两种实际方法似乎都被完全覆盖: 我已经读过了,但我还是很困惑。我不确定错过了哪些基本模块。起初,我认为EclEmma可能只是忽略了类的字节码,但是arithmetrictest似乎处理得很好 我有两个密切相关的问题: 这是否表明我安装
算术
中的三条指令没有被命中,尽管两种实际方法似乎都被完全覆盖:
我已经读过了,但我还是很困惑。我不确定错过了哪些基本模块。起初,我认为EclEmma可能只是忽略了类的字节码,但是arithmetrictest
似乎处理得很好
我有两个密切相关的问题:
IIRC,你需要实例化一个类的实例来使用提供的构造函数。我认为你也需要测试
算术的实例化,或者声明它的构造函数private
来禁止实例化你的代码暗示了一个默认构造函数,Emma无法正确标记它,因为它没有文本块
因为它没有在文本块中正确标记,Emma无法将覆盖率日志与文本文件关联,并且看起来有些代码没有被覆盖;因为,您运行了一些字节码,但无法注册行日志记录。稍后,当reporting元素读取行日志记录时,他们找不到默认构造函数的行号,它会在唯一有意义的地方——类声明行突出显示错误
默认构造函数如下所示
public Arithmetic() {
super();
}
其中super是隐含的第一条指令,它将构造对象
。虽然您可以忽略它的存在,但编译器将为您添加它。这就是你得到“3行”而不是一行的地方。啊,测试构造函数就可以做到这一点。EclEmma对于使用私有构造函数并不感到高兴,但我记得我在某个地方看到了一个解决方法。实际上,它确实有一个“文本块”,它只是空的。在字节码中,默认构造函数位于ECLEMA标记为红色的行中。要覆盖它并使其显示为绿色,测试只需调用构造函数:new alumption()
。当然,这里正确的做法是在类中声明一个private
默认构造函数。