2017-01-23 93 views
-1

任何人使用雅科科代碼覆蓋Arquillian?我的項目是一個多模塊maven項目,目前它沒有顯示Arquillian測試的代碼覆蓋率。 Arquillian.xml中除了pom更改以外是否還有其他更改?雅科科代碼覆蓋Arquillian多模塊項目

構建和插件的一部分,我的POM XML如下

<build> 
    <plugins> 

     <!-- start Jacoco --> 

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.4.201502262128</version> 
    <configuration> 
     <propertyName>coverageAgent</propertyName> 
     <append>true</append> 
    </configuration> 
    <executions> 
     <execution> 
      <id>pre-unit-test</id> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
      <configuration> 
       <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> 
       <propertyName>surefireArgLine</propertyName> 
       <append>true</append> 
      </configuration> 
     </execution> 
     <execution> 
      <id>post-unit-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>report</goal> 
      </goals> 
      <configuration> 
       <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> 
       <outputDirectory>${project.basedir}/../target/coverageReport</outputDirectory> 
       <append>true</append> 
      </configuration> 
     </execution> 
     <execution> 
      <id>pre-integration-test</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
      <configuration> 
       <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile> 
       <propertyName>failsafeArgLine</propertyName> 
      </configuration> 
     </execution> 
     <execution> 
      <id>post-integration-test</id> 
      <phase>post-integration-test</phase> 
      <goals> 
       <goal>report</goal> 
      </goals> 
      <configuration> 
       <append>true</append> 
       <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile> 
       <outputDirectory>${project.basedir}/../target/coverageReport</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>${maven.surefire.version}</version> 
    <configuration> 
     <argLine>${surefireArgLine}</argLine> 
     <includes> 
      <include>**/*TestNG*</include> 
     </includes> 
     <excludes> 
      <exclude>**/Test/**</exclude> 
      <exclude>**/*IT*</exclude> 
     </excludes> 
    </configuration> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.7.1</version> 
    <configuration> 
     <argLine>${failsafeArgLine}</argLine> 
     <includes> 
      <include>**/*Test*</include> 
     </includes> 
    </configuration> 
</plugin> 


    </plugins> 
    </build> 


<profiles> 
    <profile> 
     <id>jacoco-integ-tests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <version>2.7.1</version> 
        <configuration> 
         <argLine>${failsafeArgLine}</argLine> 
         <includes> 
          <include>**/*Test*</include> 
         </includes> 
         <properties> 
          <property> 
           <name>listener</name> 
           <value>org.sonar.java.jacoco.JUnitListener</value> 
          </property> 
         </properties> 
        </configuration> 
        <executions> 
          <execution> 
           <id>integration-tests</id> 
           <goals> 
            <goal>integration-test</goal> 
            <goal>verify</goal> 
           </goals> 
           <configuration> 
            <argLine>${failsafeArgLine}</argLine> 
            <properties> 
           <property> 
            <name>listener</name> 
            <value>org.sonar.java.jacoco.JUnitListener</value> 
           </property> 
          </properties> 
            <skipTests>false</skipTests> 
           </configuration> 
          </execution> 
         </executions> 
       </plugin> 
      </plugins> 
     </build> 
     <dependencies> 
      <dependency> 
       <groupId>org.codehaus.sonar-plugins.java</groupId> 
       <artifactId>sonar-jacoco-listeners</artifactId> 
       <version>2.6</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.jacoco</groupId> 
       <artifactId>org.jacoco.core</artifactId> 
       <version>${version.jacoco}</version> 
       <scope>test</scope> 
       </dependency> 
       <dependency> 
       <groupId>org.jboss.arquillian.extension</groupId> 
       <artifactId>arquillian-jacoco</artifactId> 
       <version>1.0.0.Alpha9</version> 
       <scope>test</scope> 
       </dependency> 

     </dependencies> 
    </profile> 

    <profile> 
     <id>jacoco-unit-tests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.13</version> 
        <configuration> 
         <argLine>${surefireArgLine}</argLine> 
         <properties> 
          <property> 
           <name>listener</name> 
           <value>org.sonar.java.jacoco.TestNGListener</value> 
          </property> 
         </properties> 
         <includes> 
          <include>**/*TestNG*</include> 
         </includes> 
         <excludes> 
          <exclude>**/FT/**</exclude> 
          <exclude>**/*IT*</exclude> 
         </excludes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
     <dependencies> 
      <dependency> 
       <groupId>org.codehaus.sonar-plugins.java</groupId> 
       <artifactId>sonar-jacoco-listeners</artifactId> 
       <version>2.6</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 
+0

[Jacoco和Arquillian在多模塊Maven項目中可能的重複](http://stackoverflow.com/questions/12354669/jacoco-and-arquillian-in-a-multi-module-maven-project) – Godin

+0

I在發佈這個問題之前已經提到這篇文章。仍然沒有工作。 – Raj

+0

單獨的「pom.xml」的截斷片段顯然不足以重現您的問題。請提供完整的可運行示例(http://stackoverflow.com/help/mcve) - 這將大大提高在此處獲得幫助的機會和速度。 – Godin

回答

0

感謝@Godin指着我正確的解決方案。我通過添加以下兩個步驟來解決它。

1)父POM

<plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
     <version>0.7.8</version> 
     <configuration> 
      <destFile>${sonar.jacoco.itReportPath}</destFile> 
      <append>true</append> 
     </configuration> 
     <executions> 
      <execution> 
      <goals> 
       <goal>prepare-agent</goal> 
       <goal>report</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 

2)在子POM集成測試運行

<plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
      <version>0.7.8</version> 
     <executions> 
      <execution> 
      <configuration> 
       <destFile>${project.build.directory}/jacoco.exec</destFile> 
      </configuration> 
      </execution> 
      <execution> 
      <id>it-report</id> 
      <phase>verify</phase> 
      <goals>   
       <goal>report-aggregate</goal> 
      </goals> 
      <configuration> 
      <!-- <dataFileIncludes>**/jacoco.exec</dataFileIncludes> --> 
       <outputDirectory>${project.build.directory}/coverage-reports/jacoco</outputDirectory> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

關鍵是我們需要使用的,而不是 「報告」, 「報告彙總」 的目標。 「報告彙總」目標可以實現多模塊代碼覆蓋。