我有一些在 Maven 项目构建期间运行的“自定义代码”。我想使用 cobertura 的行覆盖功能来生成我的“自定义代码”的执行行的报告以进行构建。
到目前为止我所取得的成就:
- 我正在使用 maven cobertura 插件来生成报告。
- “自定义代码”的执行绑定到 Maven 构建的测试阶段。
- maven 目标 cobertura:cobertura 首先运行 cobertura:instrumentation,然后在测试阶段执行我的“自定义代码”。
意外的行为:
虽然,我希望 cobertura 报告显示线路覆盖率,但线路覆盖率报告仅显示 0。
进一步调查这个问题,我发现 cobertura:instrumentation 发生在一个单独的虚拟机中。按照“ps”命令列出的进程的快照。
6647 ? S 0:00 /bin/sh -c /home/user/softwares/JDK/jdk1.7.0_79/jre/bin/java -Dlog4j.configuration=file:/tmp/log4j628942363594701372config.properties -Xmx64m net.sourceforge.cobertura.instrument.InstrumentMain --commandsfile /tmp/cobertura.5724213382380101768.cmdline
6649 ? D 0:00 /bin/sh -c /home/user/softwares/JDK/jdk1.7.0_79/jre/bin/java -Dlog4j.configuration=file:/tmp/log4j628942363594701372config.properties -Xmx64m net.sourceforge.cobertura.instrument.InstrumentMain --commandsfile /tmp/cobertura.5724213382380101768.cmdline
尝试解决此问题:
- 为了解决这个问题,我试图找出 jmockit 如何实现相同的目标。还没有真正弄清楚。
我还尝试将执行代码附加到已经运行的 VM。
com.sun.tools.attach.VirtualMachine.attach(arg0);
有人可以帮我吗?
更新 - 2015 年 10 月 23 日
java -cp C:\cobertura\lib\cobertura.jar;C:\MyProject\build\instrumented;C:\MyProject\build\classes;C:\MyProject\build\test-classes -Dnet.sourceforge.cobertura.datafile =C:\MyProject\build\cobertura.ser ASimpleTestCase
这应该使用 cobertura 的检测代码运行测试。我用一个额外的-javaagent:agent.jar 尝试了这个。这似乎也不起作用。