用途
本技能用于在 Spring Boot 项目中编写和审查单元测试,以 Mockito 为核心,帮助开发者采用框架推荐的测试模式,避免加载完整 Spring 上下文带来的开销。
主要能力
- 纯单元测试:使用 @ExtendWith(MockitoExtension.class)、@Mock、@InjectMocks 测试 @Service/@Component,不启动 Spring 上下文。
- 切片测试:使用 @WebMvcTest 与 @MockitoBean 测试控制器(Spring Boot 4.0.x 中 @MockBean 已移除)。
- JSON 测试:使用 @JsonTest 验证 JSON 序列化,并采用正确的 JSON 值断言方式(如 extractingJsonPathStringValue 等)。
- 参数化测试:使用 @ParameterizedTest 配合 @CsvSource 或 @MethodSource,替代复制粘贴的重复测试方法。
- 在测试中使用 Java record 作为领域对象。
- 确定性测试配置:@TestConfiguration、@ActiveProfiles、@Primary 固定时钟 Bean。
- 现代 Mocking API:@MockitoBean / @MockitoSpyBean;@MockBean/@SpyBean 在 Boot 4.0.x 中已弃用或移除。
使用方式
技能按以下工作流执行:
- 阅读参考文档并评估项目上下文:读取 references/321-frameworks-spring-boot-testing-unit-tests.md,并在提出改动前检查当前项目设置。
- 收集范围并确定目标改进:明确期望结果、约束以及最小安全改动集。
- 应用与框架一致的改动:按照参考模式与项目约定实现或重构配置/代码。
- 运行验证并报告结果:执行相应的构建/测试,总结改动内容、验证结果及后续操作。
约束条件:
- 在应用任何测试改动前,确保项目可编译;若编译失败,立即停止。
- 强制要求:应用任何改动前运行 ./mvnw compile 或 mvn compile。
- 安全要求:若编译失败,立即停止。
- 验证要求:应用改进后运行 ./mvnw clean verify 或 mvn clean verify。
- 应用前:阅读参考文档以了解详细规则与正反例模式。
- 边界情况:若请求范围不明确,停止并提出澄清问题后再应用改动。
- 边界情况:若缺少必要输入、文件或工具,报告缺失内容并询问是否继续提供设置指导。
适用场景
- 审查 Java 代码中的 Spring Boot 单元测试。
- 在 Java 代码中应用 Spring Boot 单元测试最佳实践。
- 为 Spring Boot 服务编写 Mockito 优先的单元测试。
- 避免在 Spring 单元测试中使用不必要的 @SpringBootTest。
- 审查无切片(slice-free)的 Spring Boot 单元测试设计。
限制
本技能聚焦单元测试;集成测试请使用 @322-frameworks-spring-boot-testing-integration-tests。具体规则、示例与约束需参阅 references/321-frameworks-spring-boot-testing-unit-tests.md。