从 jar 执行中获得 Java 覆盖率

Getting Java coverage from jar execution

我有一个 JAVA 没有单元测试的应用程序(我知道,继承的代码),我需要从几个定义为使用一些预设执行 jar 文件的测试中获得覆盖率。

我以前是这样从控制台用 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。因此,包含过滤器应该只是 +com.mycompanyname.*。尽管如此,我只得到了大约一半的包裹,甚至没有每个 class 进入每个包裹。

我也试过其他组合,比如只使用排除模式来避免所有不需要的包,结果是一样的。我知道我过去以某种方式设法做到了,但我恐怕我不记得是怎么做到的。

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

有什么建议吗?

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 开发人员提供了一个示例),但我还没有测试这些选项还没有。