即使执行,Emma也没有录制线路覆盖范围

时间:2013-03-11 13:48:17

标签: emma

使用emma录制代码覆盖率。我对线路覆盖(或线路%)特别感兴趣我们计划通过'自动化来增加源代码的线路覆盖率。我们首先手动执行方案,然后使用emma进行检查,如果行%增加。如果有,我们继续并自动化该功能。我坚持使用特定的IF-ELSE块,当我手动运行场景时,我看到了所需的结果。但艾玛没有记录该线路。这是下面的示例代码

    if (a == null) 
             {
                 final class1 c1 = new class1();
                 if (c1.isSE()) 
                 {
                    c1.sendRedirect(req, res, "error.html");
                 } 
                 else 
                 {
                     c1.sendRedirect(req, res, "testpage.html");
                 }
                 return;
             }

emma报告中前3行为绿色。但是,emma报告中的下面几行是红色的(意思是它们没有被覆盖)

c1.sendRedirect(req, res, "error.html");
c1.sendRedirect(req, res, "testpage.html");
return;

但是当我手动执行方案时,我看到了所需的结果(即重定向到testpage.html页面)为什么emma没有将此行记录为覆盖?

注意:我在下面尝试了以下问题排查(在http://emma.sourceforge.net/faq.html中提到)

  

3.18。 EMMA开始报告它已经检测了0个类,即使我给它一些输入......

     

您可能会因EMMA仪器的增量特性而绊倒。在调试启用EMMA的构建时,请尝试a   clean重新编译和/或删除所有检测输出目录   和所有 .em / .ec文件手动将EMMA重置为干净状态。

1 个答案:

答案 0 :(得分:1)

对于未来参考此事的人可能会有用...

当您对Jars进行检测时,您可以看到emma列出了一些类,其中包含“Class Compiled without Debug Mode”。如果在检测时看到这些消息,则不会生成Line%Coverage。要解决这个问题,您需要在调试模式下编译这些类,或者考虑排除这些类是否不需要。通常,带有上述消息的类将是第三方类。

如果在检测时没有看到消息“没有调试模式编译的类” - 那么您应该在报告中看到行覆盖。