maven jacoco_使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告

maven jacoco

当我开始使用Java 7时,我立即注意到Cobertura Maven插件不支持它 。 这对我来说是个大问题,因为我每天都使用代码覆盖率报告。 我做了一些研究,发现了JaCoCo代码覆盖库 。 看起来很有趣,我决定试一试。

问题在于配置它确实很困难,并且花费了大量时间。 我阅读了许多教程,只是发现其中给出的说明对我不起作用。 然后我遇到了这个博客文章 ,一切都准备就绪。

尽管该博客文章对我来说非常有价值,但还是有点含糊。 我觉得对JaCoCo Maven插件的用法进行更详细的解释很有价值。

这篇博客文章描述了我们如何使用JaCoCo Maven插件为单元测试和集成测试创建代码覆盖率报告。

我们的构建要求如下:

  • 运行测试时,我们的构建必须为单元测试和集成测试创建代码覆盖率报告。
  • 代码覆盖率报告必须在单独的目录中创建。 换句话说,必须将用于单元测试的代码覆盖率报告创建到与用于集成测试的代码覆盖率报告不同的目录中。

让我们开始吧。

注意 :这篇博客文章的示例应用程序基于我的博客文章“ Maven集成测试”的示例应用程序。 如果尚未阅读,建议您在阅读本博客文章之前先阅读它。

配置JaCoCo Maven插件

我们使用JaCoCo Maven插件有两个目的:

  1. 它使我们可以访问JaCoCo运行时代理 ,该代理记录了执行覆盖率数据。
  2. 它根据JaCo​​Co运行时代理记录的执行数据创建代码覆盖率报告。

我们可以按照以下步骤配置JaCoCo Maven插件:

  1. 将JaCoCo Maven插件添加到我们的POM文件的插件部分。
  2. 为单元测试配置代码覆盖率报告。
  3. 配置代码覆盖率报告以进行集成测试。

下面将更详细地描述这些步骤。

将JaCoCo Maven插件添加到POM文件

通过将以下插件声明添加到其“ 插件”部分,我们可以将JaCoCo Maven插件添加到我们的POM文件中:

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.6.3.201306030806</version>
</plugin>

让我们继续研究如何为单元测试配置代码覆盖率报告。

配置单元测试的代码覆盖率报告

我们可以通过将两个执行添加到插件声明中来为单元测试配置代码覆盖率报告。 这些执行方式描述如下:

  1. 第一次执行将创建一个指向JaCoCo运行时代理的属性。 确保将执行数据写入文件target / coverage-reports / jacoco-ut.exec 。 将该属性的名称设置为surefireArgLine 。 运行单元测试时,此属性的值作为VM参数传递。
  2. 运行单元测试后,第二次执行将为单元测试创建代码覆盖率报告 。 确保从文件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 whichis 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 settingsfor JaCoCo runtime agent.--><propertyName>surefireArgLine</propertyName></configuration></execution><!--Ensures that the code coverage report for unit tests is created afterunit 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>

让我们找出如何为集成测试配置代码覆盖率报告。

配置集成测试的代码覆盖率报告

我们可以通过在插件声明中添加两个执行来为集成测试配置代码覆盖率报告。 这些执行方式描述如下:

  1. 第一次执行将创建一个指向JaCoCo运行时代理的属性。 确保将执行数据写入文件target / coverage-reports / jacoco-it.exec 。 将属性的名称设置为failsafeArgLine 。 在运行集成测试时,此属性的值作为VM参数传递。
  2. 运行执行集成测试后,创建一个执行,该执行将为集成测试创建代码覆盖率报告 。 确保从文件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 whichis 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 settingsfor JaCoCo runtime agent.--><propertyName>failsafeArgLine</propertyName></configuration></execution><!--Ensures that the code coverage report for integration tests afterintegration 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 Mavenplugin 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 propertyis 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上获得 。

参考: Petri Kainulainen博客上的JCG合作伙伴 Petri Kainulainen 使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告 。

翻译自: https://www.javacodegeeks.com/2013/08/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin.html

maven jacoco

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序服务器api接口,百度智能小程序API 开放接口

登录智能小程序可以通过百度官方提供的登录能力方便地获取百度提供的用户身份标识&#xff0c;快速建立智能小程序内的用户体系。流程说明1、调用 swan.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。2、开发者服务器以 code 换取 session_key。3、调用 sw…

约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏

文章目录1. 约束(constraint)概述2. 非空约束3. 唯一性约束4. PRIMARY KEY 约束5. 自增列&#xff1a;AUTO_INCREMENT6. FOREIGN KEY 约束7. CHECK 约束8. DEFAULT约束9. 面试1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是…

如何测试Java类的线程安全性

我在最近的一次网络研讨会中谈到了这个问题&#xff0c;现在是时候以书面形式进行解释了。 线程安全是Java等语言/平台中类的重要品质&#xff0c;我们经常在线程之间共享对象。 缺乏线程安全性导致的问题很难调试&#xff0c;因为它们是零星的并且几乎不可能有意复制。 您如何…

阴阳师服务器维护稍后,《阴阳师》手游3月20日维护更新公告

亲爱的阴阳师大人&#xff1a;为了给大家带来更好的游戏体验&#xff0c;服务器将于3月20日(周三)早上6:30-9:00进行停服维护&#xff0c;如未能按时完成&#xff0c;则开服时间将会顺延。具体更新详情请留意稍后更新公告&#xff0c;或例行维护结束后至游戏登录界面查看。例行…

争议?MySQL存储过程与函数,封装,体,完整详细可收藏

文章目录1. 存储过程概述2. 创建存储过程3. 调用存储过程4. 存储函数的使用5. 存储过程和函数的查看、修改、删除6. 关于存储过程使用的争议MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起&#xff0c;应用程序无须关注存储过程和函数内部…

梦幻,MySQL视图,虚实表,完整详细可收藏

文章目录1. 数据库对象2. 视图概述3. 创建视图4. 查看视图5. 更新视图的数据6. 修改、删除视图7. 总结1. 数据库对象 2. 视图概述 2.1 为什么使用视图&#xff1f; 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视…

php cdi_DI / CDI –基础

php cdi简介&#xff08;DI / CDI基础&#xff09; 首先&#xff0c;我认为对此会有一些困惑&#xff0c;但事实是&#xff0c;它们是相同的–不同之处在于用法及其用途。 DI&#xff08;依赖项注入&#xff09;是一个通用术语–此功能基本上是在任何应用程序上进行Bean发现和…

一条一条来,MySQL变量、流程控制与游标,完整详细可收藏

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录1. 变量2. 定义条件与处理程序3. 流程控制4. 游标MyS…

ajax渲染后的点击事件,在ajax调用后渲染“喜欢”按钮

有几个问题类似于我的堆栈&#xff0c;但没有一个回答我的问题&#xff0c;所以…ajax调用返回用于创建类似按钮的标准HTML代码&#xff1a;当使用’inspect element’查看时&#xff0c;这个html确实显示在源中&#xff0c;但没有呈现&#xff0c;即按钮应该是空白的空格。有没…

无服务器:SLAppForge Sigma入门

&#xff01; Cmere。 寻找某事&#xff1f; 无服务器&#xff0c;是吗&#xff1f; 在上面。 进入海峡&#xff0c;在“ Sigma”标志处右转。 &#xff08;嗯&#xff0c;还不要怪我们&#xff1b;至少我们认为这很容易&#xff01;&#xff09; 我们的梦想目标之一是与S…

pks系统如何添加服务器,pks服务器的上电步骤.pdf

PKS 服务器的上电步骤一、服务器的安装与设置服务器为 DELL PowerEdge 2900 &#xff0c;配置为内存 2GB (2x1GB), 667MHz, ECC,Single-Rank &#xff0c;CPU 为 Quad-Core Intel Xeon Pro E5405 2GHz, 12MB Cache,1333MHz FSB &#xff0c;硬盘 2 个&#xff1a; 146GB, 3.5&q…

自动,MySQL触发器,完整详细可收藏

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录1. 触发器概述2. 触发器的创建3. 查看、删除触发器4.…

统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导

统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导题目证明结论得证题目 相信学习信号检测与估计的童鞋们肯定看到过Steven M.Kay大牛的书&#xff0c;非常厚的一本&#xff0c;不得不说&#xff0c;人家的书就是写得好&#xff0c;浅显易懂&#xff08;当然是要从头…

ajax表格内容加按钮,单击按钮时,如何触发jquery数据表fnServerData通过AJAX更新表?...

我正在将datatables插件与服务器端数据一起使用&#xff0c;并使用AJAX更新表。我的dataTables设置如下所示&#xff1a;tblOrders parameters.table.dataTable( {"sDom": t,"sAjaxSource": "../file.cfc","bServerSide": true,"…

统计1到N的整数中,除了1和自身之外,至少还能被两个数整除的数的个数Java开方平方根

使用开方是重点。 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int N scanner.nextInt(); //输入Nint count 0;for (int i 1; i < N; i) { //统计1-N中符合条件的if (fun(i)){count…

机器学习大作业《Kaggle赛题之Kannada MNIST研究》论文和Python代码

一、赛题概述及分析 1、背景介绍 邮政系统每天都会处理大量的信件&#xff0c;最为要紧的一环是要根据信件上的收信人邮编进行识别和分类&#xff0c;以便确定信件的投送地。原本这项任务是依靠大量的人工来进行&#xff0c;后来人们尝试让计算机来替代人工。然而&#xff0c…

neo4j图形界面_图形处理:betweeness中心性– neo4j的密码与graphstream

neo4j图形界面上周&#xff0c; 我写了关于中间性中心算法以及我尝试使用graphstream 理解它的尝试 &#xff0c;在阅读源代码的同时&#xff0c;我意识到我可以使用neo4j的所有最短路径算法将某些东西放在一起。 概括地说&#xff0c;中间性中心度算法用于确定图中节点的负载…

打开服务器文件提示内存不够,打开服务器文件提示内存不够

打开服务器文件提示内存不够 内容精选换一换本节操作指导您完成Windows操作系统云服务器磁盘空间清理。弹性云服务器匀出一部分磁盘空间来充当内存使用&#xff0c;当内存耗尽时&#xff0c;云服务器可以使用虚拟内存来缓解内存的紧张。但当内存使用率已经非常高时&#xff0c;…

【自适应(盲)均衡1】LMMSE、Godard、CMA常模、Sato等算法在信道均衡中的应用理论与MATLAB仿真(代码见CSDN同名资源)

1.实验背景 考虑如图所示的基带等效数据传输系统,发送符号经过ISI失真信道传输,叠加高斯加性白噪声。 设发送信号采用QPSK调制,即 x k = ( 1 j ) / 2 {x_k} = ( \pm 1 \pm j)/\sqrt 2 x

Java代码样式运算符换行格式

上周&#xff0c;我发现了什么决定了我长期以来苦苦挣扎的决定&#xff1a;是否放置&& &#xff0c; ||之类的运算符。 或在同一行或下一行。 在构造布尔表达式或隐含字符串时&#xff0c;我们可能需要中断长行。 根据《 Google Java样式指南》 &#xff0c;该中断应出…