SuperAPI AI 工具集

springboot-tdd

测试与质量

查看项目

更新于 10-15 08:41

技能介绍

Spring Boot TDD Workflow 是一套针对 Spring Boot 服务的测试驱动开发指导,强调单元测试与集成测试合计达到 80% 以上的覆盖率。

适用场景

  • 新增功能或接口
  • 修复缺陷或重构代码
  • 添加数据访问逻辑或安全规则

工作流

  1. 先编写测试(此时测试应当失败)
  2. 实现最小代码使测试通过
  3. 在测试保持绿色的前提下重构
  4. 通过 JaCoCo 强制检查覆盖率

单元测试(JUnit 5 + Mockito)

使用 @ExtendWith(MockitoExtension.class),通过 @Mock 注入依赖、@InjectMocks 注入被测服务。示例中 MarketServiceTest 对 MarketRepository 进行打桩,验证 service.create(req) 返回结果的 name 字段,并 verify 仓储的 save 调用。

模式要点:

  • 采用 Arrange-Act-Assert 结构
  • 避免部分 mock,优先使用显式打桩
  • 使用 @ParameterizedTest 覆盖多种变体

Web 层测试(MockMvc)

使用 @WebMvcTest(MarketController.class),自动注入 MockMvc,并用 @MockBean 替换 MarketService。示例对 GET /api/markets 断言状态码为 200,且 JSON 中 $.content 为数组。

集成测试(SpringBootTest)

使用 @SpringBootTest、@AutoConfigureMockMvc 与 @ActiveProfiles("test")。示例向 POST /api/markets 发送 JSON 请求体,断言返回状态为 201 Created。

持久层测试(DataJpaTest)

使用 @DataJpaTest,配合 @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) 与 @Import(TestContainersConfig.class)。示例保存 MarketEntity 后通过 findByName 查询并断言存在。

Testcontainers

建议为 Postgres/Redis 使用可复用容器以贴近生产环境,并通过 @DynamicPropertySource 将 JDBC URL 注入 Spring 上下文。

覆盖率(JaCoCo)

Maven 配置示例使用 org.jacoco:jacoco-maven-plugin:0.8.14,包含 prepare-agent 目标,以及在 verify 阶段执行 report 目标。

断言

  • 优先使用 AssertJ 的 assertThat 以提升可读性
  • 对 JSON 响应使用 jsonPath
  • 对异常使用 assertThatThrownBy(...)

测试数据构建器

示例 MarketBuilder 提供默认 name 为 "Test",通过 withName 链式设置,build() 返回 Market 对象。

CI 命令

  • Maven:mvn -T 4 test 或 mvn verify
  • Gradle:./gradlew test jacocoTestReport

原则

保持测试快速、隔离且确定;测试行为而非实现细节。

限制

资料未提供该技能的安装方式、平台支持范围、收费或价格信息,也未说明其具体运行环境要求。