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

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 添加plugin:

【注意{argLine}】

通过使用 ${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 添加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下的某级目录;如下图,我是在james-project/mailbox/store下执行的;

mvn test jacoco:report 

2.1 运行结果:

[INFO] --- jacoco-maven-plugin:0.8.7:report (post-test) @ apache-james-mailbox-store ---

[INFO] Loading execution data file /home/cys/SEtesting/james-project/mailbox/store/target/jacoco.exec

[INFO] Analyzed bundle 'Apache James :: Mailbox :: Store Framework' with 133 classes

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

[INFO] --- jacoco-maven-plugin:0.8.7:report (report) @ apache-james-mailbox-store ---

[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.生成测试覆盖率报告

相关文章:

  • openSSL 如何降版本
  • 中国篆刻——孙溟㠭浅析碑帖《停雲馆法帖》
  • CocosCreator面试真题详解
  • 【论文阅读】CiteTracker: Correlating Image and Text for Visual Tracking
  • 长芯微国产LS0104电平转换器/电平移位器P2P替代TXS0104
  • How to handle the response OpenAI Text-To-Speech API in Node.js?
  • 数据安全的重要性:守护数字时代的基石
  • Elasticsearch
  • 【CSS】如何写渐变色文字并且有打光效果
  • 华为人工智能重要服务总结
  • HALCON根据需要创建自定义函数
  • 【无人机设计与控制】 四轴飞行器的位移控制
  • 真实案例分享:零售企业如何避免销售数据的无效分析?
  • Android 优雅封装Glide
  • SprinBoot+Vue校园数字化图书馆系统的设计与实现
  • Oracle高级压缩和透明数据加密组合实验
  • 读软件设计的要素05概念的特性
  • 基于STM32设计的智能安防系统(微信小程序)(218)
  • linux学习之线程
  • Linux网络编程IO管理
  • 商务部:4月份以来的出口总体延续平稳增长态势
  • 国家发改委答澎湃:将建立和实施育儿补贴制度,深入实施提振消费专项行动
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园
  • 教育强国建设基础教育综合改革试点来了!改什么?怎么改?
  • 阿曼外交大臣:伊美下一轮谈判暂定5月3日举行
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯