maven_SonarQube 8.3.x中的Maven项目的测试覆盖率报告

news/2024/7/10 0:55:36 标签: 单元测试, java, maven, python, vue
<a class=maven" width="403px" height="256px" style="outline: none;" />

maven

几年前,我写了一篇博客文章,介绍如何在SonarQube中生成测试报告,该报告独立于单元测试和集成测试的测试报告中。 从SonarQube 6.2开始,测试报告不再在这些类别中分开(请参阅SonarQube的博客文章)。 SonarQube将所有测试报告合并为一份涵盖整体的测试报告。 因此,如果您在Maven项目中将单元测试(由Maven Surefire插件运行)和集成测试(由Maven Failsafe插件运行)分开进行测试,那么如何配置JaCoCo Maven插件。

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

  • Maven被用作构建工具。
  • 该项目可以是多模块项目。
  • 单元测试和集成测试是每个模块的一部分。
  • 测试覆盖率是通过JaCoCo 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 >3.1.0</ version >

                < executions >

                    < execution >

                        < goals >

                            < goal >add-test-source</ goal >

                            < goal >add-test-resource</ goal >

                        </ goals >

                        < configuration >

                            < sources >

                                < source >src/it/java</ source >

                            </ sources >

                            < resources >

                                < resource >

                                    < directory >src/it/resources</ directory >

                                </ resource >

                            </ resources >

                        </ configuration >

                    </ execution >

                </ executions >

            </ plugin >

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

Maven的构建生命周期包含一个称为集成测试的阶段 在此阶段,我们要运行集成测试。 幸运的是,当在POM中设置Maven故障安全插件的目标集成测试时,它会自动绑定到此阶段。 如果您希望在集成测试失败时构建失败,那么还必须将目标验证添加到POM中:

 < plugin >

                < groupId >org.apache.maven.plugins</ groupId >

                < artifactId >maven-failsafe-plugin</ artifactId >

                < version >3.0.0-M4</ version >

                < configuration >

                    < encoding >${project.build.sourceEncoding}</ encoding >

                </ configuration >

                < executions >

                    < execution >

                        < goals >

                            < goal >integration-test</ goal >

                            < goal >verify</ goal >

                        </ goals >

                    </ execution >

                </ executions >

            </ plugin >

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

测试报告生成

我们想使用JaCoCo Maven插件生成测试报告。 它应该为单元测试和集成测试生成测试报告。 因此,该插件必须要准备两个单独的代理。 然后他们在测试运行期间生成报告。 Maven的构建生命周期包含自己的阶段,可以在测试阶段之前进行准备(测试集成测试)。 测试阶段的准备阶段称为“过程测试类”,集成测试阶段的准备阶段称为“预集成测试” 。 当在POM中设置了目标prepare-agentprepare-agent-integration时,JaCoCo会将其代理自动绑定到这些阶段。 但这还不够。 JaCoCo还必须创建一个报告,以便SonarQube可以读取报告以进行可视化。 因此,我们必须在POM中添加目标报告报告集成

 < plugin >

                < groupId >org.jacoco</ groupId >

                < artifactId >jacoco-maven-plugin</ artifactId >

                < version >0.8.5</ version >

                < executions >

                    < execution >

                        < goals >

                            < goal >prepare-agent</ goal >

                            < goal >prepare-agent-integration</ goal >

                            < goal >report</ goal >

                            < goal >report-integration</ goal >

                        </ goals >

                    </ execution >

                </ executions >

            </ plugin >

同样,它是<project> <build> <plugins>部分的一部分。

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

SonarQube测试报告可视化

现在,我们想在SonarQube中可视化我们的测试报告。 因此,成功构建后,我们必须在我们的项目中运行Sonar Maven 3插件(命令mvn sonar:sonar )。 因此,Sonar Maven插件知道将报告上传到哪里,我们必须在〜/ .m2 / setting.xml中配置SonarQube实例

 < profile >

      < id >sonar</ id >

      < activation >

        < activeByDefault >true</ activeByDefault >

      </ activation >

      < properties >

        <!-- Optional URL to server. Default value is http://localhost:9000 -->

        < sonar.host.url > http://localhost:9000 </ sonar.host.url >

      </ properties >

    </ profile >

在SonarQube仪表板中打开项目时,我们会看到总体测试覆盖率报告。

概要

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

  • Maven 3.6.3
  • Maven插件:
    • Maven Surefire插件
  • SonarQube 8.3.1
  • Java 11

链接

  1. Jacoco Maven插件项目站点
  2. Maven故障安全插件项目站点
  3. 构建助手Maven插件项目站点
  4. SonarQube有关通用测试覆盖率的文档
  5. GitHub上的示例Maven项目

翻译自: https://www.javacodegeeks.com/2020/06/test-coverage-reports-for-maven-projects-in-sonarqube-8-3-x.html

maven


http://www.niftyadmin.cn/n/1707258.html

相关文章

杜马岛

这篇同样写于qq空间&#xff0c;但就是在刚才。看完《杜马岛》&#xff0c;内心有个呼喊的声音从弱到强&#xff0c;从强到弱&#xff0c;就是“我需要救赎”。我知道&#xff0c;这种感觉看电影《黑天鹅》后&#xff0c;也产生过。但是&#xff0c;那时&#xff0c;挥挥胳膊&a…

JavaScript(三)--严格检查模式,数据结构(补充)

JavaScript严格检查模式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>严格检查模式</title><script>// 严格检查模式// 前提&#xff1a; IDEA 需要设置ES6语法&#xff0c;必须放在J…

unity shader物体随着距离摄像机距离呈现淡入淡出效果

算法&#xff1a; 1 设置淡入的起始距离 和 结束距离 2 在vertex阶段计算物体顶点与相机的距离 3 根据距离计算alpha 源码如下&#xff1a; Shader "Custom/Fade" {Properties{_MainTex("Texture", 2D) "white" { }_FadeDistanceNear("N…

两个数的简单计算器_那是我两个小时都不会回来的

两个数的简单计算器正如我之前关于linting主题所说的&#xff0c;花时间修改代码的好处有限&#xff0c;因为自动工具告诉您这样做。 更糟糕的是&#xff0c;这些工具并非万无一失。 例如&#xff0c;我们一直在针对完美无害的try-with-resources构造周围定期添加SpotBugs警告的…

shader alpha混合blend

Alpha Blending&#xff0c;中文译作Alpha混合 Blending就是控制透明的。处于光栅化的最后阶段 公式 Blend SrcFactor DstFactor SrcFactor是源系数&#xff0c;DstFactor是目标系数 最终颜色 &#xff08;Shader计算出的点颜色值 * 源系数&#xff09;&#xff08;点累积颜…

@JsonIgnore注解的作用

JsonIgnore注解的作用 JsonIgnore拆成两个单词&#xff0c;就是Json和Ignore&#xff0c;Ignore的意思是忽略&#xff0c;所以可以简单的翻译一下就是生成json的时候忽略某个属性。 此注解是类的注解&#xff0c;作用是json序列化时将Java bean中的一些属性忽略掉&#xff0c;就…

odeforces Round #144 (Div. 2) B

http://codeforces.com/contest/233/problem/B s(x)最大为81.所以x*(xs(x))n假如有x存在&#xff0c;则x必然小于sqrt(n)。且大于sqrt(n)-82。。 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <algorithm>5 #include <…