SonarQube中的Maven项目的单元和集成测试报告

自SonarQube 4.2起。 测试报告不是在Maven构建期间由Sonar Maven插件生成的(请参阅SonarQube的博客文章 )。 因此,在Sonar Maven插件收集SonarQube服务器的信息之前,必须由另一个插件生成测试报告。 在这里,Jacoco Maven插件可以提供帮助。 它有可能生成SonarQube可以理解的测试报告。 Jacoco Maven插件更进一步,它有可能生成用于集成测试的测试报告。

在以下各节中,提出了满足以下条件的解决方案:

  • Maven被用作构建工具。
  • 该项目可以是多模块项目。
  • 单元测试和集成测试是每个模块的一部分。 这里,集成测试是测试模块中类之间的集成的测试。
  • 测试报告在单元测试报告和集成测试报告中是分开的。

下一部分的路线图是,首先显示了Maven项目结构,用于单元测试和集成测试的分离。 然后显示了Maven项目配置,其中包含单独的单元测试运行和集成测试运行。 之后,我们来看看Maven项目配置,以生成在单元测试和集成测试中分开的测试报告。 最后,SonarQube的仪表板中显示了SonarQube的配置,用于测试报告的可视化。

Maven项目结构

首先,我们看一下单个模块项目的默认Maven项目结构。

my-app
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └──
│   └── test
│       └── java
│           └──

目录src / main / java包含生产源代码,目录src / test / java包含测试源代码。 我们可以将单元测试和集成测试放到这个目录中。 但是我们想将这两种类型的测试放在单独的目录中。 因此,我们添加了一个名为src / it / java的新目录 然后将单元测试放在src / test / java目录中,并将集成测试放在src / it / java目录中因此新的项目结构如下图所示。

my-app
├── pom.xml
├── src
│   ├── it
│   │   └── java
│   │       └──
│   ├── main
│   │   └── java
│   │       └──
│   └── test
│       └── java
│           └──

单元和集成测试运行

幸运的是,单元测试运行配置是Maven默认项目配置的一部分。 如果满足以下条件,Maven将自动运行这些测试:

  • 测试位于目录src / test / java
  • 测试类名称以Test开头或以TestTestCase结尾

Maven在Maven的构建生命周期阶段测试期间运行这些测试

集成测试运行配置必须手动完成。 它存在可以提供帮助的Maven插件。 我们希望满足以下条件:

  • 集成测试存储在目录src / it / java
  • 集成测试类名称要么以IT开头,要么以ITITCase结尾
  • 集成测试在Maven的构建生命周期阶段进行集成测试。

首先,Maven必须知道它必须在其测试类路径中包含目录src / it / java 。 在这里,Build Helper Maven插件可以提供帮助。 它将目录src / it / java添加到测试类路径。

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><version>1.8</version><executions><execution><id>add-test-source</id><phase>process-test-sources</phase><goals><goal>add-test-source</goal></goals><configuration><sources>src/it/java</sources></configuration></execution><execution><id>add-test-resources</id><phase>generate-test-resources</phase><goals><goal>add-test-resource</goal></goals><configuration><resources><resource>src/it/resources</resource></resources></configuration></execution></executions></plugin>

上面的代码段必须插入到项目根pom中的<project> <build> <plugins>部分

Maven的构建生命周期包含一个称为集成测试的阶段 在此阶段,我们要运行集成测试。 因此,我们将Maven故障安全插件绑定到阶段集成测试:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-failsafe-plugin</artifactId><version>2.13</version><configuration><encoding>${project.build.sourceEncoding}</encoding></configuration><executions><execution><id>failsafe-integration-tests</id><phase>integration-test</phase><goals><goal>integration-test</goal><goal>verify</goal></goals></execution></executions>
</plugin>

同样,以上代码片段也必须插入到项目根pom中的<project> <build> <plugins>部分 。 然后,当Maven故障保护插件的类名称以IT开头或以ITITCase结尾时,它们会自动运行集成测试

测试报告生成

我们想使用Jacoco Maven插件生成测试报告。 它应该生成两个测试报告,一个用于单元测试,一个用于集成测试。 因此,该插件必须要准备两个单独的代理。 然后他们在测试运行期间生成报告。 Maven的构建生命周期包含自己的阶段,可以在测试阶段之前进行准备( 测试集成测试 )。 测试阶段的准备阶段称为过程测试类集成测试阶段的准备阶段称为集成前测试。 在这两个阶段中,我们绑定了Jacoco Maven插件因此此插件的配置类似于以下代码片段(同样,它是<project> <build> <plugins>一节的一部分):

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.7.2.201409121644</version><executions><execution><configuration><destFile>${sonar.jacoco.reportPath}</configuration><id>pre-test</id><phase>process-test-classes</phase><goals><goal>prepare-agent</goal></goals></execution>
<!-- we want to execute <span class="hiddenSpellError" pre="execute " data-mce-bogus="1">jacoco</span>:prepare-agent-integration in test phase,-->
but before executing maven failsafe plugin --><execution><configuration><destFile>${sonar.jacoco.itReportPath}</destFile></configuration><id>pre-itest</id><phase>pre-integration-test</phase><goals><goal>prepare-agent-integration</goal></goals></execution></executions>
</plugin>

配置元素destFile是应将测试报告存储到的位置的路径。 使用属性$ { sonar.jacoco.reportPath}和$ { sonar是很重要的 jacoco.itReportPath}。 SonarQube使用这些属性来查找可视化的测试报告。

现在,我们可以运行目标mvn install,并且我们的项目已构建为包含单元和集成测试,并生成两个测试报告。

SonarQube测试报告可视化

现在,我们想在SonarQube中可视化我们的测试报告。 因此,在成功构建之后,我们必须在我们的项目中运行Sonar Maven 3插件(命令mvn sonar:sonar )。

在SonarQube仪表板中打开项目时,我们仅看到每个模块的单元测试的报告。 原因是必须在SonarQube中分别配置集成测试的报告可视化。 SonarQube文档中很好地描述了这些配置步骤。

摘要

该博客描述了如何在Maven构建期间为单元测试和集成测试生成测试报告。 在GitHub上 ,我托管了一个示例项目,演示了所有配置步骤。 作为技术环境,我使用

  • Maven的3.2.5
  • Maven插件:
    • Maven Surefire插件
  • SonarQube 4.5.1
  • Java 7

链接

  1. SonarQube的博客文章SonarQube中的单元测试执行
  2. Jacoco Maven插件项目站点
  3. Maven构建生命周期简介
  4. Maven故障安全插件项目站点
  5. 构建助手Maven插件项目站点
  6. 有关Java Projec集成测试的代码覆盖率的 SonarQube文档
  7. GitHub上的示例Maven项目

翻译自: https://www.javacodegeeks.com/2015/05/unit-and-integration-test-reports-for-maven-projects-in-sonarqube.html

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

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

相关文章

IOS-状态栏的简单操作

一、启动时隐藏状态栏 1、在info.plist里面 Status bar is initially hidden 设置为 YES2、在appDelagate里面 设置 [application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 二、将所有页面状态栏字体颜色设为白色1.在info.plist中添加一个字段&#x…

python中、文件最重要的功能是( )和接收数据_Python基础语法14个知识点大串讲

来源&#xff1a;Python数据之道Python基础语法大串讲Python 是一门面向对象的编程语言&#xff0c;相信这篇文章对于初学者而言应该会有一个比较大的帮助&#xff0c;下面我们将 Python 中常用的基础语法和函数做了一个汇总&#xff0c;满满的干货&#xff0c;供大家学习。1、…

hadoop简单介绍_Hadoop:简单介绍

hadoop简单介绍什么是Hadoop&#xff1a; Hadoop是用Java编写的框架&#xff0c;用于在大型商品硬件群集上运行应用程序&#xff0c;并具有类似于Google File System和MapReduce的功能 。 HDFS是一个高度容错的分布式文件系统&#xff0c;与Hadoop一样&#xff0c;旨在部署在低…

SQL预编译防注入小测试

个人对SQL预编译的认识: 1、效率提升,对SQL语句编译一次可多次使用.避免了硬解析和软解析等步骤&#xff0c;当执行的语句上规模的时候性能差异还是很明显的。 2、安全提升,预编译之后的SQL语句,语义不会发生变化,安全性有相当大的提升。 using System; using System.Collectio…

春天:注入列表,地图,可选对象和getBeansOfType()陷阱

如果您使用Spring框架超过一个星期&#xff0c;那么您可能已经知道此功能。 假设您有多个bean实现了给定的接口。 尝试仅自动接线此类接口的一个bean注定会失败&#xff0c;因为Spring不知道您需要哪个特定实例。 您可以通过使用Primary批注来指定一个优先于其他实现的“ 最重要…

python实现表格分析与建模_python实现数据分析与建模

前言首先我们做数据分析&#xff0c;想要得出最科学&#xff0c;最真实的结论&#xff0c;必须要有好的数据。而实际上我们一般面对的的都是复杂&#xff0c;多变的数据&#xff0c;所以必须要有强大的数据处理能力&#xff0c;接下来&#xff0c;我从我们面临的最真实的情况&a…

Unity 利用Coroutine实现跳动数字效果

纯粹转载&#xff1a;转载注明参考链接&#xff01; 参考链接&#xff1a;http://xataxnova.blog.163.com/blog/static/236620063201451061738122/&#xff0c;作者&#xff1a;网易博客 xataxnova 示例代码&#xff1a;&#xff08;将该脚本绑在一个Lable对象上&#xff0c;即…

java mvc 案例_springmvc经典案例

本想自己写一下总结&#xff0c;但是发现一篇好文&#xff0c;转发一下&#xff0c;日后自己再做补充&#xff1b;感谢Sunnier&#xff0c;引自&#xff1a;https://www.cnblogs.com/sunniest/p/4555801.htmlSpringMVC学习笔记----一、SpringMVC基础入门&#xff0c;创建一个He…

Ajax.ActionLink 辅助方法实现局部刷新

1&#xff0c;需要引用一个JS文件jquery.unobtrusive-ajax.min.js【MVC4 默认存在Scripts文件夹里】引用到母版页 _Layout.cshtml&#xff0c;并且一定要放在JQuery引用文件之后 2&#xff0c;需要添加一个分布视图到指定的目录里&#xff0c;分布视图是用来显示局部刷新的 3&a…

java 命名约定_Java命名约定

java 命名约定我想写这篇简短的文章来帮助某些难以记住Java API类和方法名称的人。 如您所知&#xff0c;Java是区分大小写的语言&#xff0c;要构建Java程序&#xff0c;您需要使用许多内置API类和方法。 而且&#xff0c;初学者发现很难准确地记住方法名称和类名称而不改变大…

Discuz UCenter 修改手记 - 2014.12.19

最近在整JAVA和UCENTER的东西&#xff0c;受限于项目架构需要&#xff0c;无法完全以UCENTER为中心&#xff0c;所以在对接过程中遇到了许多不愉快的事情。经历多番研究&#xff0c;终于解决了其中了两个大问题&#xff0c;现记录下来&#xff0c;以备日后查看。 一、解决email…

java泛型方法无参_从头再来:Java泛型(开发必须知道的)

Java泛型老规矩&#xff0c;测试一下&#xff0c;下面的程序能否正常运行&#xff1f;为什么&#xff1f;开头测试题泛型就是实现了参数化类型&#xff0c;也就是代码可以适用于多种类型。泛型是在编译期检查的&#xff0c;在编译期检查类型是否安全。我认为泛型最有用的就是和…

几种常见模式识别算法整理和总结

这学期选了门模式识别的课。发现最常见的一种情况就是&#xff0c;书上写的老师ppt上写的都看不懂&#xff0c;然后绕了一大圈去自己查资料理解&#xff0c;回头看看发现&#xff0c;Ah-ha&#xff0c;原来本质的原理那么简单&#xff0c;自己一開始仅仅只是被那些看似formidab…

使用Fabric8在CDI管理的bean中注入Kubernetes Services

序幕 在Kubernetes中我最喜欢的就是发现服务的方式。 为什么&#xff1f; 主要是因为用户代码不必处理注册&#xff0c;查找服务&#xff0c;也没有网络意外&#xff08;如果您曾经尝试过基于注册表的方法&#xff0c;那么您就会知道我在说什么&#xff09; 。 这篇文章将介绍…

意外分配– JIT编译抖动

在研究ByteWatcher时 &#xff08;请参阅我的上一篇 文章 &#xff09;&#xff0c;我遇到了一些非常奇怪的事情。 这是实际的代码段&#xff0c;用于找出特定线程上的分配量&#xff1a; return (long) mBeanServer.invoke(name,GET_THREAD_ALLOCATED_BYTES,PARAMS,SIGNATUR…

fastd java下载_FastReport VCL报表控件

FastReport VCL报表控件是著名的 Delphi 打印控件。含全部源码。支持 Delphi 10.2 Tokyo&#xff0c;FastReport可以在大量的方式报表的创建过程中操纵对象。快速发展的报表和随后的打印&#xff0c;这样的优点&#xff0c;正如预览打印文档的外观。专业版除了报表标准版的功能…

#102030:在30天内运行20 10K来庆祝Java的20年

1995年5月23日是技术史上的重要时刻。 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局。 Java将在今年的同一天庆祝20岁生日。 Java 20年&#xff0c;哇&#xff01; 回顾20年前的存储器时代&#xff0c;思考一下Java的发明时间/方式。 万维网专用于精…

View 的 android:visibility属性的讨论

Android VIEW 中的 visibility 属性&#xff0c;在API中的描述为&#xff1a;Controls the initial visibility of the view. [控制VIEW的初始可见性]。 其中包含三个参数&#xff1a; * 默认值为visible&#xff0c;可见。这里需要注意的是 "invisible" 和 "go…

jms java client mq_将Java客户端(JMS)连接到IBM MQ时出现问题

我正在尝试使用基本上通过以下方式构建的Java客户端使用SSL消耗IBM MQ(版本8.0.0.8)&#xff1a;Oracle JKD 8和IBM JRE 7(出于测试目的&#xff0c;我每个都有一个客户端)com.ibm.mq.allclient-9.1.0.0.jarjavax.jms-api-2.0.1.jarspring-jms-4.3.7.RELEASE.jarspring-jms-4.3…

JQuery-Dialog(弹出窗口,遮蔽窗口)

在Ajax中经常用到的弹出窗口和遮蔽窗口。自己写肯定是一个最佳方案&#xff0c;但时间和成本上&#xff0c;还是决定了寻找现成的吧。大概罗列一下。需要我满足我几个条件 一定要简洁方便拥有遮蔽功能&#xff0c;Model Dialog &#xff0c;所谓的模态窗口可以根据HTML弹出窗口…