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. SonarQube文档,有关Java Projec集成测试的代码覆盖率
  7. GitHub上的示例Maven项目

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

maven

maven_SonarQube中的Maven项目的单元和集成测试报告相关推荐

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

    自SonarQube 4.2起. 测试报告不是在Maven构建期间由Sonar Maven插件生成的(请参阅SonarQube的博客文章 ). 因此,在Sonar Maven插件收集SonarQube ...

  2. IDEA中创建maven项目后解决main文件夹下目录不全的问题

    IDEA中创建maven项目后解决main文件夹下目录不全的问题 参考文章: (1)IDEA中创建maven项目后解决main文件夹下目录不全的问题 (2)https://www.cnblogs.co ...

  3. 在Eclipse中编译maven项目出的问题

    在Eclipse中编译Maven项目,运行 jetty:run 指令的时候会出错,在 JRE选项卡中加入: -Dorg.mortbay.util.URI.charset=GBK -Xms512m -X ...

  4. Eclipse中导入Maven项目后没有run on server

    场景 在Eclipse中导入Maven项目后,想要运行时,却没有run on server 解决 右击项目--properties--project facets--勾选Dynamic Web Mod ...

  5. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...

  6. idea中新建maven项目缺少src目录的根本解决方法(适合萌新 少走弯路)

    idea中新建maven项目缺少src目录的根本解决方法(适合萌新 少走弯路) 参考了很多博客,基本都是让在setting下的runner 添加-DarchetypeCatalog=internal参 ...

  7. Eclipse中对maven项目进行打包

    在Eclipse中对maven项目进行打包,发现三种方式: 第一种方法:cmd窗体中使用maven命令进行打包 (此方式环境变量必须配置maven环境) 1.选中项目右键 --> Show in ...

  8. jenkins中配置maven项目

    文章目录 前言 一.全局工具配置 二.配置Publish Over SSH(提前在插件管理中安装Publish Over SSH插件) 三.git认证配置 四.项目配置 前言 记录jenkins中配置 ...

  9. idea中的Maven项目怎么配置Tomcat部署

    idea中的Maven项目怎么配置Tomcat部署 1. 开篇简介 2. 开始部署 3. 总结 1. 开篇简介 嗨,大家好! 今天,我想给大家分享的是:如何在idea中的Maven项目怎么配置Tomc ...

最新文章

  1. QT 实用代码片段 (持续更新)
  2. 高并发场景下创建多少线程才合适?一条公式帮你搞定!!
  3. “365算法每日学计划”:05打卡-图解冒泡排序(多解法)
  4. Android中实现不同文字颜色和图文混排的Span总结
  5. Linux 查看端口占用情况 并 结束进程
  6. Oracle Spatial-元数据及SDO_GEOMETRY
  7. MySQL MHA 安装
  8. c语言全角半角转换函数,全角半角转换函数(示例代码)
  9. 6阶群的非平凡子群_离散数学复习笔记
  10. ssh 远程登录_C.4 彻底解决-新版本Sentaurus TCAD的SSH远程登录问题!!!
  11. Linux的Namespace与Cgroups介绍
  12. linux qt 生成word报告_Qt 生成word、pdf文档
  13. 游戏开发unity资源管理系列:查看AssetBundle的工具-AssetStudio
  14. location.hostnbsp;与nbsp;locat…
  15. 老婆反问我:“是不是也算个凤凰男啊?”
  16. “毒液” 高危漏洞背后的技术较量
  17. Alitum Designer 出现警告:[Warning] xxx.SchDoc Compiler Net xxx has no driving source
  18. 04741计算机网络原理2018年版-第八章 网络安全基础 知识要点
  19. Android代理模式(静态代理,动态代理,Retrofit代理模式分析)
  20. dom4j生成xml节点内容换行

热门文章

  1. __proto__(隐式原型)与prototype(显式原型)
  2. HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式...
  3. Linux下实现apache代理tomcat
  4. LINUX 下 WEBlogic集群的搭建-01
  5. 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
  6. IOS中UITableview中封装九宫格
  7. SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
  8. 常用汉字的unicode 编码
  9. javascript es6 箭头函数 简介
  10. goland 关闭 自动移除未使用的包  自动添加需要的包