问题描述
有没有人尝试过配置 JaCoCo 以将单元和集成测试的覆盖率转储到 2 个不同的文件中,以便 SONAR 使用它们,使用 ANT 构建?
Has any one tried configuring JaCoCo to dump the coverage of unit and integration tests in 2 different files, for SONAR to use them, using ANT build?
推荐答案
这是一个可行的解决方案,为单元测试和集成测试生成报告.此解决方案使用 append 策略.
Here is a working solution, generating the report for both unit tests and integration tests. This solution is using the append strategy.
请注意,为了在 apply 策略上正常工作,阶段应按顺序执行(如果 mvn test 和 mvn verify -DskipUnitTests 将并行执行,可能无法正常工作).
Please note that in order to work properly on the apply strategy, the phases should be executed sequentially (if the mvn test and mvn verify -DskipUnitTests will be executed in parallel there is possible to not work fine).
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <configuration> <skip>${skipTests}</skip> <!-- This line is very important, because allows to append the results to the `jacoco_aggregation.exec` report. --> <append>true</append> <!-- DestFile is the file defined, where the `prepare-agent` will pe publishing the result of analysis, for the defined `phase`. In our case is executed initially and to the `pre-integration-test` phase. --> <destFile>${project.build.directory}/coverage-reports/jacoco_aggregation.exec</destFile> <!-- DataFile is the path from where the `report` goal will be reading the report in order to create the `outputDirectory` .xml file. --> <dataFile>${project.build.directory}/coverage-reports/jacoco_aggregation.exec</dataFile> <!-- To the goal `report`, will be reading the report from `dataFile` path and will be publishing the result, to the `outputDirectory` path as an .xml file. In our case, the report is generated for two times: - first time after the `test` phase - second time after the `post-integration-test` phase --> <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory> </configuration> <executions> <!-- Prepares the property pointing to the JaCoCo runtime agent which is passed as VM argument when Maven the Surefire plugin is executed. --> <execution> <id>pre-unit-test</id> <goals> <goal>prepare-agent</goal> </goals> <configuration> <!-- Sets the name of the property containing the settings for JaCoCo runtime agent. --> <propertyName>surefireArgLine</propertyName> </configuration> </execution> <!-- Ensures that the code coverage report `jacoco.xml` is generated once the unit tests were executed. Executes the `report` goal after the `post-integration-test` phase. --> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> <!-- Prepares the property pointing to the JaCoCo runtime agent which is passed as VM argument when Maven the Failsafe plugin is executed. --> <execution> <id>pre-integration-test</id> <phase>pre-integration-test</phase> <goals> <goal>prepare-agent</goal> </goals> <configuration> <!-- Sets the name of the property containing the settings for JaCoCo runtime agent. --> <propertyName>failsafeArgLine</propertyName> </configuration> </execution> <!-- Ensures that the code coverage report `jacoco.xml` is generated once the integration tests were executed. Executes the `report` goal after the `post-integration-test` phase. --> <execution> <id>post-integration-test</id> <phase>post-integration-test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <!-- Sets the VM argument line used when unit tests are run. --> <argLine>${surefireArgLine}</argLine> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <!-- Sets the VM argument line used when integration tests are run. --> <argLine>${failsafeArgLine}</argLine> </configuration> </plugin>
生成报告后,您可以执行声纳命令来应用报告.
Once the reports are generated, you can execute the sonar commant to apply the reports.
mvn sonar:sonar -Dsonar.coverage.jacoco.xmlReportPaths="target/site/jacoco/jacoco.xml"