maven jacoco
当我开始使用Java 7时,我立即注意到Cobertura Maven插件不支持它 。 这对我来说是个大问题,因为我每天都使用代码覆盖率报告。 我做了一些研究,发现了JaCoCo代码覆盖库 。 看起来很有趣,我决定试一试。
问题在于配置它确实很困难,并且花费了大量时间。 我阅读了许多教程,只是发现其中给出的说明对我不起作用。 然后我遇到了这个博客文章 ,一切都准备就绪。
尽管该博客文章对我来说非常有价值,但还是有点含糊。 我觉得对JaCoCo Maven插件的用法进行更详细的解释很有价值。
这篇博客文章描述了我们如何使用JaCoCo Maven插件为单元测试和集成测试创建代码覆盖率报告。
我们的构建要求如下:
- 运行测试时,我们的构建必须为单元测试和集成测试创建代码覆盖率报告。
- 代码覆盖率报告必须在单独的目录中创建。 换句话说,必须将用于单元测试的代码覆盖率报告创建到与用于集成测试的代码覆盖率报告不同的目录中。
让我们开始吧。
注意 :这篇博客文章的示例应用程序基于我的博客文章“ Maven集成测试”的示例应用程序。 如果尚未阅读,建议您在阅读本博客文章之前先阅读它。
配置JaCoCo Maven插件
我们使用JaCoCo Maven插件有两个目的:
- 它使我们可以访问JaCoCo运行时代理 ,该代理记录了执行覆盖率数据。
- 它根据JaCoCo运行时代理记录的执行数据创建代码覆盖率报告。
我们可以按照以下步骤配置JaCoCo Maven插件:
- 将JaCoCo Maven插件添加到我们的POM文件的插件部分。
- 为单元测试配置代码覆盖率报告。
- 配置代码覆盖率报告以进行集成测试。
下面将更详细地描述这些步骤。
将JaCoCo Maven插件添加到POM文件
通过将以下插件声明添加到其“ 插件”部分,我们可以将JaCoCo Maven插件添加到我们的POM文件中:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
</plugin>
让我们继续研究如何为单元测试配置代码覆盖率报告。
配置单元测试的代码覆盖率报告
我们可以通过将两个执行添加到插件声明中来为单元测试配置代码覆盖率报告。 这些执行方式描述如下:
- 第一次执行将创建一个指向JaCoCo运行时代理的属性。 确保将执行数据写入文件target / coverage-reports / jacoco-ut.exec 。 将该属性的名称设置为surefireArgLine 。 运行单元测试时,此属性的值作为VM参数传递。
- 运行单元测试后,第二次执行将为单元测试创建代码覆盖率报告 。 确保从文件target / coverage-reports / jacoco-ut.exec中读取执行数据,并将代码覆盖率报告写入目录target / site / jacoco-ut中 。
我们的插件配置的相关部分如下所示:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<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 path to the file which contains the execution data. -->
<destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
<!--
Sets the name of the property containing the settings
for JaCoCo runtime agent.
-->
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
<!--
Ensures that the code coverage report for unit tests is created after
unit tests have been run.
-->
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<!-- Sets the path to the file which contains the execution data. -->
<dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
<!-- Sets the output directory for the code coverage report. -->
<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
让我们找出如何为集成测试配置代码覆盖率报告。
配置集成测试的代码覆盖率报告
我们可以通过在插件声明中添加两个执行来为集成测试配置代码覆盖率报告。 这些执行方式描述如下:
- 第一次执行将创建一个指向JaCoCo运行时代理的属性。 确保将执行数据写入文件target / coverage-reports / jacoco-it.exec 。 将属性的名称设置为failsafeArgLine 。 在运行集成测试时,此属性的值作为VM参数传递。
- 运行执行集成测试后,创建一个执行,该执行将为集成测试创建代码覆盖率报告 。 确保从文件target / coverage-reports / jacoco-it.exec中读取执行数据,并将代码覆盖率报告写入目录target / site / jacoco-it 。
我们的插件配置的相关部分如下所示:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<executions>
<!-- The Executions required by unit tests are omitted. -->
<!--
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 path to the file which contains the execution data. -->
<destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
<!--
Sets the name of the property containing the settings
for JaCoCo runtime agent.
-->
<propertyName>failsafeArgLine</propertyName>
</configuration>
</execution>
<!--
Ensures that the code coverage report for integration tests after
integration tests have been run.
-->
<execution>
<id>post-integration-test</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<!-- Sets the path to the file which contains the execution data. -->
<dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
<!-- Sets the output directory for the code coverage report. -->
<outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
而已。 现在,我们已经配置了JaCoCo Maven插件。 下一步是配置Maven Surefire插件。 让我们找出如何做到这一点。
配置Maven Surefire插件
我们使用Maven Surefire插件运行示例应用程序的单元测试。 因为我们要为单元测试创建代码覆盖率报告,所以我们必须确保在运行单元测试时JaCoCo代理正在运行。 我们可以通过添加surefireArgLine属性作为argLine配置参数的值的值确保这一点。
Maven Surefire插件的配置如下所示(突出显示了所需的更改):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
<configuration>
<!-- Sets the VM argument line used when unit tests are run. -->
<argLine>${surefireArgLine}</argLine>
<!-- Skips unit tests if the value of skip.unit.tests property is true -->
<skipTests>${skip.unit.tests}</skipTests>
<!-- Excludes integration tests when unit tests are run. -->
<excludes>
<exclude>**/IT*.java</exclude>
</excludes>
</configuration>
</plugin>
我们快完成了。 剩下要做的就是配置Maven Failsafe插件。 让我们找出如何做到这一点。
配置Maven故障安全插件
我们的示例应用程序的集成测试由Maven Failsafe插件运行。 因为我们要为集成测试创建代码覆盖率报告,所以我们必须确保在运行集成测试时JaCoCo代理正在运行。 我们可以通过将failsafeArgLine属性的值添加为argLine配置参数的值来实现。
Maven Failsafe插件的配置如下所示(突出显示了所需的更改):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.15</version>
<executions>
<!--
Ensures that both integration-test and verify goals of the Failsafe Maven
plugin are executed.
-->
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<!-- Sets the VM argument line used when integration tests are run. -->
<argLine>${failsafeArgLine}</argLine>
<!--
Skips integration tests if the value of skip.integration.tests property
is true
-->
<skipTests>${skip.integration.tests}</skipTests>
</configuration>
</execution>
</executions>
</plugin>
创建代码覆盖率报告
现在,我们已成功完成所需的配置。 让我们看看如何为单元测试和集成测试创建代码覆盖率报告。
该博客文章的示例应用程序具有三个构建配置文件,下面对此进行了描述:
- 开发配置文件在开发过程中使用,它是我们构建的默认配置文件。 当此配置文件处于活动状态时,仅运行单元测试。
- 集成测试概要文件用于运行集成测试。
- all-tests配置文件用于运行单元测试和集成测试。
我们可以通过在命令提示符处运行以下命令来创建不同的代码覆盖率报告:
- 命令mvn clean test运行单元测试,并为目录target / site / jacoco-ut创建单元测试的代码覆盖率报告。
- 命令mvn clean verify -P integration-test运行集成测试,并创建用于集成测试的代码覆盖率报告到目录target / site / jacoco-it 。
- 命令mvn clean verify -P all-tests运行单元测试和集成测试,并为单元测试和集成测试创建代码覆盖率报告。
今天就这些。 与往常一样,此博客文章的示例应用程序可在Github上获得 。
maven jacoco
本文介绍了如何配置JaCoCo Maven插件来为单元测试和集成测试创建代码覆盖率报告。内容包括将JaCoCo插件添加到POM文件,配置Surefire和Failsafe插件,以及如何为不同类型的测试生成单独的报告。
2555

被折叠的 条评论
为什么被折叠?



