从jar执行中获取Java覆盖范围

时间:2015-12-15 07:51:19

标签: java code-coverage jacoco emma

我有一个没有单元测试的UPDATE ReservationStay SET ReasonForstayCode = b.ReasonForStayCode FROM ReservationStay a INNER JOIN MissingReasonForStay b ON a.ReservationStayID = b.ReservationStayID; 应用程序(我知道,继承的代码),我需要从几个测试中获得覆盖率,这些测试被定义​​为执行带有一些预设的jar文件。

我曾经在控制台中使用JAVA这样做:

Emma

问题是使用java -cp emma.jar emmarun -raw -ix +some.filter.* -out ./coverage/test001.em -jar MyJarFile.jar <application arguments> 参数进行过滤。我想只从我自己的包中获得覆盖,这些包名为-ix。因此,通过包含过滤器应该只是com.mycompany.whatever.blah.blah.blah。尽管如此,我只得到大约一半的包,甚至每个包中都没有。

我还尝试了其他组合,例如仅使用排除模式来避免所有不需要的包,结果是相同的。我知道我过去曾设法以某种方式做到这一点,但我担心我无法记住这一点。

这就是为什么我正在寻找一个不同的覆盖库,它允许我从jar文件中获得覆盖。我看到了JMockit,Jacoco甚至令人印象深刻的Sonar,但似乎他们不允许使用jar覆盖,而且它们是专为单元测试覆盖而设计的。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

JaCoCo包含一个名为jacocoagent.jar的代理,可以完成这项工作。我在网上找不到示例,但我尝试按照文档进行操作,这样做有效:

java -javaagent:./route/to/jacocoagent.jar=destfile=./coverage/test001.exec,includes=com.mycompany.* -jar MyJarFile.jar <Jar arguments>

然后我可以使用eclemma插件将exec文件加载到Eclipse中,合并它们,然后导出为HTML文件。我认为可以从ant / maven生成HTML报告,甚至可以使用为此目的编写的Java应用程序(jacoco开发人员提供示例),但我还没有测试过这些选项。