用途
Spring Boot Testing 是一个面向 Spring Boot 4 应用的测试专家技能,用于在具体测试场景下选择最合适的 Spring Boot 测试技术,并遵循现代测试模式与最佳实践。它强调测试金字塔(单元测试快、切片测试聚焦、集成测试完整),主张使用能提供足够信心的最窄测试切片,并推荐 AssertJ 的流式可读断言以及 MockMvcTester、RestTestClient 等现代 API。
主要能力
该技能提供测试切片的选择指导,通过场景与注解的对应关系帮助定位方案:控制器与 HTTP 语义使用 @WebMvcTest;仓储与 JPA 查询使用 @DataJpaTest;REST 客户端与外部 API 使用 @RestClientTest;JSON 序列化与反序列化使用 @JsonTest;完整应用使用 @SpringBootTest。
它附带多份参考文档,覆盖测试切片总览与决策矩阵、Web 层 MockMvc、数据层 Testcontainers、REST 客户端测试、MockMvcTester(AssertJ 风格,3.2+)、传统 MockMvc(3.2 之前)、Spring Boot 4+ 的 RestTestClient、依赖 Mock(MockitoBean)、AssertJ 基础与集合断言、Testcontainers JDBC(PostgreSQL、MySQL 等)、Instancio 测试数据生成(3 个以上属性)、上下文缓存加速以及 Spring Boot 4.0 迁移变更。
技能还给出快速决策树:测试控制器端点用 @WebMvcTest 配合 MockMvcTester;测试仓储查询用 @DataJpaTest 配合 Testcontainers(真实数据库);测试服务业务逻辑用纯 JUnit + Mockito(不启动 Spring 上下文);测试外部 API 客户端用 @RestClientTest 配合 MockRestServiceServer;测试 JSON 映射用 @JsonTest;需要完整集成测试用 @SpringBootTest 并最小化上下文配置。
使用方式
该技能以参考文档与决策指导的形式提供,用户可依据场景选择对应切片与工具。Spring Boot 4 的要点包括:RestTestClient 作为 TestRestTemplate 的现代替代;@MockitoBean 取代已废弃的 @MockBean;MockMvcTester 提供 AssertJ 风格 Web 测试断言;模块化 starter 提供针对特定技术的测试 starter;上下文暂停(Spring Framework 7)自动暂停缓存上下文。
依赖方面,基础测试使用 spring-boot-starter-test(test 作用域);WebMvc 测试使用 spring-boot-starter-webmvc-test;Testcontainers 使用 spring-boot-testcontainers。
最佳实践
技能包含代码复杂度评估:若覆盖单个方法需要超过 5-7 个测试用例,说明该方法可能过于复杂,建议重构为更小、更聚焦的函数;若用户同意重构则协助识别抽取点,若用户决定继续则照常实现测试。它还建议为常用对象与 mock 设置创建辅助方法以避免代码冗余,使用 @DisplayName 描述测试意图,按主场景、其他路径、异常与错误的顺序组织测试,并面向真实生产场景编写测试。
测试覆盖率目标为 80%,作为质量与投入之间的实用平衡,使用 Jacoco Maven 插件进行覆盖率报告与跟踪。优先覆盖业务关键路径(支付处理、订单校验)、复杂算法(定价、折扣计算)、错误处理(异常、边界情况)以及集成点(外部 API、数据库)。
适用场景与限制
该技能适用于使用 Spring Boot 4 进行测试的开发者,尤其是需要在多种测试切片与工具之间做出选择、希望采用 JUnit 6 与 AssertJ 现代写法的团队。其内容聚焦测试策略与工具选择,不涉及具体业务实现。关于该技能的收费、价格、平台支持范围等信息暂未提供。