设为首页 加入收藏

TOP

maven 多模块项目的测试覆盖率分析 - jacoco 聚合分析(一)
2023-07-25 21:38:56 】 浏览:37
Tags:maven 项目的 jacoco

前言

对于大多数 maven 多模块化工程,可以使用 Jacoco 这款工具,关于 Jacoco 这款工具,ChatGPT 对它的描述是这样的:

JaCoCo(Java Code Coverage)是一个开源的测试覆盖率工具,它可以用于帮助开发人员衡量其软件测试的有效性。它支持多种语言,包括 Java 和 Kotlin 等,并且可以与多个构建工具和集成开发环境(IDE)一起使用。

JaCoCo 可以收集测试覆盖率数据,并生成可视化的测试覆盖率报告,帮助开发人员更好地理解其代码的测试覆盖率情况。它提供了多种测试覆盖率指标,例如行覆盖率、分支覆盖率、方法覆盖率、类覆盖率等,可以帮助开发人员了解其测试覆盖率情况的具体细节。

JaCoCo 还可以与多种构建工具集成,例如 Maven、Gradle 等。它可以通过 Maven 或 Gradle 的插件来收集测试覆盖率数据,并在构建过程中生成测试覆盖率报告

Jacoco 可以很好的支持对 Maven 多模块进行聚合分析测试覆盖率,可以从项目整体输出覆盖率报告非常方便。

下面展示一下具体的使用方法

一:创建根项目

先创建一个多模块的 Maven 项目,大致的结构如下:

├── parent-project
├── pom.xml
├── business-module1
│   ├── pom.xml
│   └── src
│       ├── main
│       └── test
├── business-module2
│   ├── pom.xml
│   └── src
│       ├── main
│       └── test
└── test-module
    ├── pom.xml
    └── src
        ├── main
        └── test

在一个空白的目录,一个的 Maven 的根项目:

mvn archetype:generate \
-DgroupId=org.example \
-DartifactId=jacoco-multi-module-example \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

然后进入目录:

cd jacoco-multi-module-example

把根目录 pom.xmlpackaging 属性改为 pom,从而将根目录设置为一个聚合模块,用来管理多个子模块的依赖关系

<packaging>pom</packaging>

二:创建子模块

根据上面的结构,在根目录下,分别创建:

  • business-module1
  • business-module2
  • test-module

在根目录的路径下,输入以下命令,创建 business-module1 模块:

mvn archetype:generate \
-DgroupId=org.example \
-DartifactId=business-module1 \
-DarchetypeArtifactId=maven-archetype-quickstart  \
-DinteractiveMode=false

创建 business-module2 模块:

mvn archetype:generate \
-DgroupId=org.example \
-DartifactId=business-module2 \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

创建 test-module 单元测试模块:

mvn archetype:generate \
-DgroupId=org.example \
-DartifactId=test-module \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

然后模拟实际的开发,分别在模块1,模块2中添加一些业务代码,

business-module1 中我添加一个简单的数学运算 IntegerSimpleCompute 类:

// business-module1\src\main\java\org\example\IntegerSimpleCompute.java
package org.example;

public class IntegerSimpleCompute {

    public int add(int i, int j) {
        return i + j;
    }

    public int subtract(int i, int j) {
        return i - j;
    }

    public int multiply(int i, int j) {
        return i * j;
    }

    public int divide(int i, int j) {
        return i / j;
    }
}

business-module2 中我添加一个简单的逻辑运算 IntegerLogicCompute 类:

// business-module2\src\main\java\org\example\IntegerLogicCompute.java
package org.example;

public class IntegerLogicCompute {

    public int increment(Integer i) {
        return i + 1;
    }

    public int decrement(Integer i) {
        return i- 1;
    }

    // 存在条件分支的语句,需要满足所有条件分支判断才能达到 100% 的覆盖率
    public boolean equals(Integer i, Integer j) {
        if (i < 127 && j < 127) {
            return i == j;
        }
        return i.equals(j);
    }
}

三:创建测试模块

我们将 test-module 作为测试模块,在该模块的 pom.xml 文件中,我们引入上面的测试模块,方便对他们进行集成测试

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>business-module1</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>business-module2</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇项目中多级缓存设计实践总结 下一篇Apache Dubbo 官方正式发布 Sprin..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目