2016-11-08 312 views
0

我一直在努力,为了使用部署的仪表EAR和jacococagent.jar跟踪的外部集成测试运行反对说,JBoss代码覆盖来实现在JBoss服务器JaCoCo离线码覆盖。JaCoCo离线Instrumentaion和集成测试覆盖报告

我一直跟着导游如这些:

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通过反编译其中的一些课程。

我把带有测试代码的JAR包含在其中的jacococagent.jar以及包含jacoco-agent.popreties文件的EAR部署到JBoss中。 JBoss启动得很好(在我开始直接将jacocoagent.jar捆绑到它之前,它用来获取ClassNotFound异常)。

的“/stage/live_integration_jacoco.exec”文件在该点的大小为“0”创建。

我对服务器运行一些测试,甚至是一些手动测试,然后停止应用程序。

的“/stage/live_integration_jacoco.exec”文件现在有数据(数据30-60kb至今在我的意见)。

我将该exec文件导入到eclipse中,并且它没有任何错误地加载并显示项目中的类,但是它报告0的覆盖范围。

嗯,我不知道还有什么要尝试在这一点上。

有没有人有一些想法如何让我的情况正确生成覆盖率报告?

谢谢!

回答

0

我怀疑部署在服务器类编译与Oracle Java编译器,而在Eclipse类与Eclipse的Java编译器编译,因此因为他们不同JaCoCo不能将它们联系起来。为了证实这一点 - 您可以尝试使用您尝试导入的exec文件生成报告,但使用Ant或Maven在Eclipse之外生成报告。并确保您执行原始(非检测)类的报告生成,否则它们将不匹配。

+0

感谢您的回复。我已经验证了在导入exec文件时,这些类未被检测到。我试图用我的exec文件来生成一个带有maven的报告,但是我必须做一些错误的事情,因为我无法让它正常工作。你有没有通过maven完成的例子?也许我正在查找错误的命令... – PAULUS

+0

在要为其生成报告的模块中执行'mvn jacoco:report -Djacoco.dataFile =/stage/live_integration_jacoco.exec'。 – Godin

+0

好的,我一直在使用mvn jacoco:report,但是我无法让它为我工作。例如,我运行了'mvn jacoco:report -Djacoco.dataFile =“C:\ development \ live_integration_jacoco.exec”-DoutputDirectory =“C:\ development \ JaCoCo-Output” --- jacoco-maven-plugin:0.7.7.201606060606:report(default-cli)@ module-name --- [INFO]由于丢失执行数据文件而跳过JaCoCo执行。' – PAULUS

相关问题