我一直试图在JBoss服务器中使用检测的EAR进行部署和jacococagent.jar实现JaCoCo离线代码覆盖,以跟踪针对所述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 Agent 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覆盖。
好吧,我不确定此时还有什么可以尝试。
有没有人对如何在我的情况下正确生成覆盖率报告有一些想法?
谢谢!
答案 0 :(得分:0)
我怀疑服务器上部署的类是使用Oracle Java编译器编译的,而Eclipse中的类是使用Eclipse Java编译器编译的,因此JaCoCo不能将它们关联起来,因为它们不同。要确认这一点 - 您可以尝试使用您尝试导入的exec文件生成报告,但在Eclipse之外使用Ant或Maven生成报告。并确保您对原始(非检测)类执行报告生成,否则它们也将不匹配。