Skip to content

测试代码覆盖率

Mock 框架的使用

项目使用的框架是 SpringBoot3 + Jacoco + Maven 的这种方式

静态代码覆盖

要求是:增量代码100%覆盖,生成对应的单元测试方法

  • 1、实践中最快的方式还是直接让对方读取 jacoco 的文件,然后让 cc 生成对应的代码
    • 这里可以找一下工具获取到增量代码没有覆盖到文件(有类似工具的,实际工作的时候使用的是架构提供的工具)
    • 如果不行的话,再手动微调,或者生成脚本辅助
  • 2、注意一下隔离
  • 3、脚本文件

pom 配置修改(隔离操作)

            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-surefire-plugin</artifactId>  
                <version>3.1.2</version>  
                <configuration>                    <groups>serviceTest</groups>  
                    <forkCount>2</forkCount>          <!-- 2个并行JVM -->  
                    <reuseForks>false</reuseForks>    <!-- 不复用,确保隔离 -->  
                    <parallel>classes</parallel>       <!-- 类级别并行 -->  
<!--                    <includes>-->  
<!--                        <include>**/DeductionSlipAppServiceTest.java</include>-->  
<!--                    </includes>-->  
                </configuration>  
            </plugin>

目前就是直接使用 claude code 自动生成

类似这种脚本,然后看一下 jacococ 覆盖率文件

mvn test -pl soms-service-start -Dtest=PickGoodsSelfProductAppServiceTest,PickGoodsSelfProductDomainServiceNewTest -Dmaven.test.failure.ignore=true jacoco:report

也可以让大模型生成一个检测增量代码的覆盖率报告生成脚本

单测运行

命令

/Library/Java/apache-maven-3.9.7/bin/mvn clean test -Dmaven.test.failure.ignore=true -Dpmd.skip=true -Drat.skip=true -Dcheckstyle.skip=true

执行完之后会生成一下 jacoco 的覆盖率文件,然后拿这个文件进行对比,保证分支覆盖率是完全的

踩坑记录

如果出现断言或者验证失败的情况,直接 mvn test 是不行的,需要加一下命令

mvn test -Dmaven.test.failure.ignore=true

多模块测试执行

典型的 Maven 多模块测试执行

问题说明

当你使用 -pl soms-service-start -am 时,Maven 会构建 soms-service-start 及其所有依赖模块(包括 soms-service-common)。

  关键问题:-Dtest=ProductDiagnosisServiceTest 参数会传递给所有模块,包括依赖模块。

  执行流程:
  1. Maven 构建 soms-service-common 模块
  2. Surefire 插件在 soms-service-common 中查找 ProductDiagnosisServiceTest
  3. 找不到该测试类 → 构建失败 ❌

推荐其中一种解决方案: 忽略未找到测试的错误

mvn test -pl soms-service-start -am \
	-Dtest=SelfActivityProductAppServiceHandleMrsConflictTest \
	-Dsurefire.failIfNoSpecifiedTests=false \
	-Dlog.console=true \
	-Dshein-cipher.kdms.unit-test=true

让 claude code 先识别一下需要覆盖的文件,然后找到文件中没有覆盖的代码,生成对应的单元测试

编译修复,通过上述方式修复一下。(执行单个类,扫描一下其中ERROR的部分,不允许有异常和失败用例)

cc 使用了 java25 编译,实际上环境是 17

  我这边的情况:
  - 运行 java -version → 显示 Java 17
  - 运行 mvn -version → 显示 Java 25(Maven 编译时用的)

直接运行命令

mvn -version

可以看我们IDEA实际编辑使用的环境

遇到这种问题,可以让 cc 复查一下。