当前位置: 首页 > article >正文

maven项目下使用Jacoco测试覆盖率

【本文前提是了解maven项目及其Pom.xml机制,不熟悉可以看该博客的0.Pre部分Auto-Unit-Test-Case-Generator -- java项目自动测试生成-CSDN博客】

JaCoCo(Java Code Coverage)是一个开源的代码覆盖率工具,专门用于测量 Java 应用程序的代码覆盖率。

注意,测试覆盖率自然是在src/test目录下的某个包/类:

myproject/
├── .gitignore
├── pom.xml
├── README.md
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── MyMainClass.java
│   │   ├── resources/
│   │   │   ├── application.properties
│   │   │   └── log4j.properties
│   │   └── webapp/
│   │       ├── WEB-INF/
│   │       │   └── classes/
│   │       └── index.html
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           └── MyMainClassTest.java
│       └── resources/
│           └── test-application.properties
└── target/
    ├── classes/
    │   ├── com/
    │   │   └── example/
    │   │       └── MyMainClass.class
    │   ├── application.properties
    │   └── log4j.properties
    ├── generated-sources/
    ├── maven-archiver/
    │   └── pom.properties
    ├── maven-status/
    ├── test-classes/
    ├── test/
    │   └── com/
    │       └── example/
    │           └── MyMainClassTest.class
    ├── surefire-reports/
    └── classes/

Step1:准备工作-修改pom.xml:

1.1 添加插件1--maven-surefire-plugin:

【注意{argLine}】

插件添加位置:如前文的项目树状图,我要测试myproject,那就在同级的pom.xml内添加即可,下同;

通过使用 ${argLine},你可以在其他地方(如父 POM 或其他插件配置)定义的 argLine 值被继承下来。这使得你可以集中管理 JVM 参数,而不是在每个插件配置中重复定义。

 <build>
        <plugins>   
 <!-- 以下是需要复制的内容,以上是方便查找复制的位置-->      
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <argLine> ${argLine} </argLine>
                    <forkCount>4</forkCount>
                    <reuseForks>true</reuseForks> 
                </configuration>
            </plugin>

1.2 添加插件2--Jacoco:

 <build>
        <plugins>   
 <!-- 以下是需要复制的内容,以上是方便查找复制的位置-->   
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
  
    <executions>
        <execution>
            <id>pre-test</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>post-test</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Step2:运行如下命令: 

执行路径在: src/test下的某级目录;如下图,我是在子模块目录下执行的;

mvn test jacoco:report 

2.1 运行结果:

[INFO] --- jacoco-maven-plugin:0.8.7:report (post-test) @ aa-bb-xx ---

[INFO] Loading execution data file /home/xx/target/jacoco.exec

[INFO] Analyzed bundle 'aa :: bb :: xx' with 133 classes

[INFO] BUILD SUCCESS

2.1.2如果 报错如下,那就是没有加{argLine}的原因:

[INFO] --- jacoco-maven-plugin:0.8.7:report (report) @ aa-bb-xx ---

[INFO] Skipping JaCoCo execution due to missing execution data file.

报错解释:

意味着 JaCoCo 插件在尝试生成覆盖率报告时没有找到必要的执行数据文件。通常,JaCoCo 会在运行测试时生成一个或多个执行数据文件(通常是 .exec 文件),这些文件包含了覆盖率信息。如果这些文件不存在或找不到,JaCoCo 插件就无法生成覆盖率报告。

Step3:覆盖率报告文件位置:

生成/target/site/jacoco/; 其中的index.html打开即可看到覆盖率报告;

附:dependency vs plugin:

  • 依赖项[通过 <dependencies> 标签配置],项目运行/构建过程中需要的库.e.g.函数需要的库
  • 构建插件[通过 <plugins> 标签配置]  ,执行特定任务的工具.e.g.生成测试覆盖率报告


http://www.kler.cn/news/309361.html

相关文章:

  • vue3使用panolens.js实现全景,带有上一个下一个,全屏功能
  • 风力发电厂智能化转型5G工业路由器物联网应用解决方案
  • 大数据-133 - ClickHouse 基础概述 全面了解
  • C#基础(12)递归函数
  • 测试工程师学历路径:从功能测试到测试开发
  • MUNIK谈ASPICE系列专题分享(六)企业为什么要做ASPICE?
  • 5.内容创作的未来:ChatGPT如何辅助写作(5/10)
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-15
  • Nacos服务治理
  • 电学基础概念详解及三相电公式汇总
  • AI写作神器:助力体制内小白轻松完成材料撰写,减少慌张茫然
  • unity的学习
  • linux驱动开发-内核并发 poll 和 lock
  • 深度解码:机器学习与深度学习的界限与交融
  • CMakeLists.txt的学习了解
  • 【LabVIEW学习篇 - 25】:JKI状态机
  • I2C/IIC学习笔记
  • nonlocal本质讲解(前篇)——从滤波到Nonlocal均值滤波
  • Java项目实战II基于Spring Boot的宠物商城网站设计与实现
  • linux-软件包管理-包管理工具(Debian 系)
  • 【C++入门学习】7. 类型
  • Java项目实战II基于Java+Spring Boot+MySQL的服装厂服装生产管理系统的设计与实现
  • 归并排序
  • Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法
  • [ffmpeg]音频格式转换
  • matlab绘制不同区域不同色彩的图,并显示数据(代码)
  • 【每日一题】LeetCode 2848.与车相交的点(数组、哈希表、前缀和)
  • python知识点100篇系列(18)-解析m3u8文件的下载视频
  • 东土科技加码芯片业务投资,携手神经元共建新型工业生态
  • 【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战