使用文心快码(Wenxin Quick Code)为Spring Boot项目自动生成单元测试,能够全面覆盖Controller、Service、Repository三层,实现全路径覆盖与异常场景测试,并将代码行覆盖率提升至85%以上,从而免去手动编写Mock对象和断言逻辑的繁琐重复工作。下面直接介绍具体操作步骤。

准备测试环境与项目接入
首先确认项目采用Spring Boot 2.7及以上版本或3.x版本,Maven的依赖管理中需包含spring-boot-starter-test(集成了JUnit 5、Mockito、AssertJ等)。若使用Gradle构建,则确保testImplementation配置中已引入相应依赖库。
登录百度智能云控制台,开通“文心快码”服务,选择“Java单元测试生成”专属模型实例,获取API Key和Endpoint URL。注意:务必关闭IDE中内置的Lombok插件自动编译功能,否则文心快码在解析AST时会因注解未被展开而报错。
提前复制项目根目录下的pom.xml或build.gradle文件路径,后续需要上传至文心快码Web控制台以进行上下文识别。
生成Controller层测试用例
进入文心快码控制台,点击“上传源码”,将整个src/main/java目录拖入界面,然后点击“分析结构”,等待3~5秒完成AST解析。
在左侧导航栏勾选目标Controller类(例如LoginController),右侧面板会自动列出该类的所有@RequestMapping方法。点击“生成测试”按钮,系统默认启用“全路径覆盖+异常注入”模式。
生成的测试结果中,每个@Test方法均包含完整的MockMvc调用链、JSON请求体构造、状态码校验以及响应字段断言。若接口包含@RequestBody参数,文心快码会自动识别DTO字段并填充典型值(例如String填充"test"、Long填充1L、LocalDateTime填充当前时间)。
优化Service层覆盖率
第一步:在文心快码界面切换至Service包路径,选中UserServiceImpl类。
第二步:点击“高级设置”,将“分支覆盖强度”滑块拖至“高”档位,勾选“生成边界值测试”,并取消勾选“忽略private方法”。
第三步:点击“生成”,等待输出。此时生成的测试类将包含针对findByEmail()方法的空字符串、null、超长邮箱(65字符)、非法格式(无@符号)等4组输入组合,每个测试用例均标注了@DisplayName以说明测试意图。
注意:文心快码默认不会Mock @Transactional方法内部的调用,若Service中存在跨方法事务嵌套,需手动在@Test方法前添加@Commit或@Rollback注解,否则测试可能因事务未提交而无法查询到数据。
修复Repository层Mock缺陷
方法一:直接复用文心快码生成的JpaRepository测试模板
它已预置了findById()、save()、findAll()的标准断言,但findAll()默认仅验证返回集合的size(),未校验元素内容。需要手动在assertThat(result).hasSize(2)后追加:.extracting("username").containsExactly("admin", "guest")。
方法二:启用“SQL映射增强”开关后重新生成
此模式会扫描application-test.yml中的spring.jpa.hibernate.ddl-auto: create-drop配置,反向推导实体字段约束,为save()测试自动生成违反@NotNull/@Size的非法输入用例。例如,若User.password字段标注了@Size(min=6),则会生成password="123"的测试,并断言抛出ConstraintViolationException。
方法三:复杂JPQL查询方法单独处理
若Repository中包含@Query("SELECT u FROM User u WHERE u.status = :status AND u.createdAt > :date"),文心快码无法自动推导参数范围。此时需在界面输入提示词:“为status='ACTIVE'且date=2025-01-01T00:00:00Z生成正向查询测试,再补充status=null的空指针防护测试”。
合并与执行测试
将文心快码生成的所有Test文件保存至src/test/java对应的包路径下,确保类名以Test结尾(例如UserServiceTest),且不包含@TestInstance(Lifecycle.PER_CLASS)等JUnit 4遗留注解。
执行mvn test -Dtest=UserServiceTest#testFindByEmail_InvalidFormat命令,验证单个用例通过;然后运行mvn clean test -Pcoverage,生成target/site/jacoco/index.html覆盖率报告。
若行覆盖率低于80%,打开报告定位红色未覆盖行——通常集中在try-catch的catch块或日志打印语句。此时返回文心快码,在“增强策略”中启用“异常路径强制注入”,重新生成对应的Service测试即可补全覆盖率。
