【发布时间】:2016-11-08 21:10:20
【问题描述】:
我一直在尝试在 JBoss 服务器中实现 JaCoCo 离线代码覆盖,使用检测 EAR 进行部署和 jacococagent.jar,以便跟踪针对所述 JBoss 运行的外部集成测试的代码覆盖。
我一直在遵循以下指南:
http://www.eclemma.org/jacoco/trunk/doc/offline.html
http://automationrhapsody.com/code-coverage-with-jacoco-offline-instrumentation-with-maven/
我觉得我已经很接近了,因为一切似乎都在工作,但是,当我在 eclipse 的 EclEmma 插件中加载覆盖率报告时,它报告为所有内容的 0 覆盖率(我知道这是错误的)。
这是我的设置:
这里是maven插件配置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<!-- <destFile>${sonar.jacoco.reportPath}</destFile> -->
<append>true</append>
<excludes>
<exclude>**/dao/**/*Dao*</exclude>
<exclude>**/dao/**/*DAO*</exclude>
<exclude>**/dao/**/*Vo*</exclude>
<exclude>**/dao/**/*VO*</exclude>
<exclude>**/ui/**/*</exclude>
<exclude>**/*Vo.*</exclude>
<exclude>**/*VO.*</exclude>
<exclude>**/test/**/*</exclude>
<exclude>**/tester/**/*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
</configuration>
</execution>
<execution>
<id>unit-test-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${sonar.jacoco.reportPath}</dataFile>
</configuration>
</execution>
<execution>
<id>jacoco-instrument</id>
<phase>test</phase>
<goals>
<goal>instrument</goal>
</goals>
<configuration>
<skip>${jacoco.skip.instrument}</skip>
<!-- <skip>false</skip> -->
</configuration>
</execution>
</executions>
</plugin>
这是我的 jacoco-agent.properties 文件:
destfile=/stage/live_integration_jacoco.exec
output=file
dumponexit=true
append=true
我将 JaCoCo 代理 JAR 捆绑在 EAR 中作为这些依赖项(第二个就是 jacocoagent.jar 在我们的存储库中标记的内容):
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<version>${jacoco.version}</version>
</dependency>
<dependency>
<groupId>org.jacoco.build</groupId>
<artifactId>org.jacoco.jacocoagent</artifactId>
<version>${jacoco.version}</version>
</dependency>
这是我的过程:
我在项目上运行这个:mvn clean install -U -Djacoco.skip.instrument=false
这会生成我的仪表化 EAR 工件。我已经通过反编译其中的一些来验证其中的类确实是由 JaCoCo 检测的。
我使用已检测代码的 EAR、其中包含的 jacococagent.jar 以及包含的 jacoco-agent.popreties 文件,并将其部署到 JBoss。 JBoss 启动得很好(在我开始直接将 jacocoagent.jar 捆绑在其中之前,它曾经得到 ClassNotFound 异常)。
此时将创建“/stage/live_integration_jacoco.exec”文件,大小为“0”。
我在服务器上运行一些测试,甚至是一些手动测试,然后停止应用程序。
“/stage/live_integration_jacoco.exec”文件现在有数据(在我的观察中到目前为止有 30-60kb 的数据)。
我将该 exec 文件导入到 eclipse 中,它加载时没有任何错误并显示项目中的类,但是它报告所有内容的覆盖率为 0。
嗯,我不确定现在还可以尝试什么。
是否有人对如何在我的情况下正确生成覆盖率报告有一些想法?
谢谢!
【问题讨论】:
标签: java maven jboss integration-testing jacoco