Appearance
Mock 框架的使用
项目使用的框架是 SpringBoot3 + Jacoco + Maven 的这种方式
静态代码覆盖
要求是:增量代码100%覆盖,生成对应的单元测试方法
- 1、实践中最快的方式还是直接让对方读取 jacoco 的文件,然后让 cc 生成对应的代码
- 这里可以找一下工具获取到增量代码没有覆盖到文件(有类似工具的,实际工作的时候使用的是架构提供的工具)
- 如果不行的话,再手动微调,或者生成脚本辅助
- 2、注意一下隔离
- 3、脚本文件
- 现在基本上不太使用了
- 单元测试代码覆盖率-脚本文件
- 单元测试代码覆盖率-脚本文件 v2
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 复查一下。