使用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重置为干净状态。
答案 0 :(得分:1)
对于未来参考此事的人可能会有用...
当您对Jars进行检测时,您可以看到emma列出了一些类,其中包含“Class Compiled without Debug Mode”。如果在检测时看到这些消息,则不会生成Line%Coverage。要解决这个问题,您需要在调试模式下编译这些类,或者考虑排除这些类是否不需要。通常,带有上述消息的类将是第三方类。
如果在检测时没有看到消息“没有调试模式编译的类” - 那么您应该在报告中看到行覆盖。