Skip to content

Everything Claude Code 的 springboot-tdd Skill 是一套专为 Spring Boot 项目设计的测试驱动开发(TDD)自动化方案,集成 JUnit 5、Mockito、MockMvc、Testcontainers 与 JaCoCo。它通过 AI 助手标准化测试流程,确保单元、接口、持久化和集成测试全覆盖,并强制 80%+ 覆盖率,极大提升代码质量与交付信心。无论新功能开发、Bug 修复还是重构,都能一键激活 Skill,快速生成和完善高质量测试代码。

Everything Claude Code Spring Boot TDD Skill:JUnit 5、Mockito、MockMvc、Testcontainers 与 JaCoCo 测试

在现代 Spring Boot 项目中,测试驱动开发(TDD)已成为保障代码质量、加速迭代与预防回归的核心实践。但实际落地过程中,开发团队常常面临测试覆盖率低、测试代码风格不统一、集成测试环境难以还原生产等难题。Everything Claude Code 的 springboot-tdd Skill,正是为解决这些痛点而生——它让 AI 编程助手(如 Claude Code、Codex、Cursor 等)具备“懂业务、会测试、能落地”的生产级测试能力。

本 Skill 集成了 JUnit 5、Mockito、MockMvc、Testcontainers 和 JaCoCo,覆盖单元测试、Web 层测试、集成测试、持久化测试及覆盖率统计,形成一套标准化、可复用的 Spring Boot TDD 流程。Skill 可与 TDD Guide AgentJava Reviewer Agent 等配套 Agent 协作,支持自动生成测试、覆盖率分析与持续集成校验,也能与 Spring Boot Patterns SkillVerification Loop Skill 等协同,打造端到端的高质量开发闭环。

1. 适用场景与 Skill 触发条件

springboot-tdd Skill 主要在以下场景自动激活:

  • 开发新功能、新接口或数据访问逻辑时
  • 修复 Bug 或进行业务重构时
  • 增加安全规则、权限校验等高风险变更时

当你在 Claude Code 等 AI 编程助手中描述「新增一个 REST API」「优化某个 Service」「修复某个数据持久化 Bug」等需求时,Skill 会自动建议并生成相应的测试代码骨架,并引导你走完 TDD 全流程。

2. Step by Step:Spring Boot TDD Skill 使用流程

Step 1:先写测试(Fail First)

Skill 会为你的需求自动生成对应的测试类和方法,覆盖单元、Web、集成、持久化等层级。所有测试初始状态应为失败,确保 TDD 原则。

示例:单元测试(JUnit 5 + Mockito)

java
@ExtendWith(MockitoExtension.class)
class MarketServiceTest {
  @Mock MarketRepository repo;
  @InjectMocks MarketService service;

  @Test
  void createsMarket() {
    CreateMarketRequest req = new CreateMarketRequest("name", "desc", Instant.now(), List.of("cat"));
    when(repo.save(any())).thenAnswer(inv -> inv.getArgument(0));

    Market result = service.create(req);

    assertThat(result.name()).isEqualTo("name");
    verify(repo).save(any());
  }
}

要点:

  • 遵循 Arrange-Act-Assert 模式
  • 明确模拟依赖,避免部分 Mock
  • 可用 @ParameterizedTest 扩展多组输入

Step 2:最小实现(让测试通过)

根据测试驱动,Skill 会建议你只实现让测试通过的最小业务逻辑,避免过度设计。

Step 3:重构(保持测试绿灯)

Skill 会检测代码异味并建议重构(如方法拆分、命名优化等),确保重构后所有测试依然通过。

Step 4:覆盖率校验(JaCoCo 强制 80%+)

Skill 自动集成 JaCoCo 插件,持续追踪测试覆盖率。覆盖率低于阈值时,AI 助手会提醒补充测试。

Maven 配置示例:

xml
<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.14</version>
  <executions>
    <execution>
      <goals><goal>prepare-agent</goal></goals>
    </execution>
    <execution>
      <id>report</id>
      <phase>verify</phase>
      <goals><goal>report</goal></goals>
    </execution>
  </executions>
</plugin>

Step 5:多层级测试覆盖

Web 层测试(MockMvc)

java
@WebMvcTest(MarketController.class)
class MarketControllerTest {
  @Autowired MockMvc mockMvc;
  @MockBean MarketService marketService;

  @Test
  void returnsMarkets() throws Exception {
    when(marketService.list(any())).thenReturn(Page.empty());

    mockMvc.perform(get("/api/markets"))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.content").isArray());
  }
}

集成测试(SpringBootTest)

java
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
class MarketIntegrationTest {
  @Autowired MockMvc mockMvc;

  @Test
  void createsMarket() throws Exception {
    mockMvc.perform(post("/api/markets")
        .contentType(MediaType.APPLICATION_JSON)
        .content("""
          {"name":"Test","description":"Desc","endDate":"2030-01-01T00:00:00Z","categories":["general"]}
        """))
      .andExpect(status().isCreated());
  }
}

持久化测试(DataJpaTest + Testcontainers)

java
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import(TestContainersConfig.class)
class MarketRepositoryTest {
  @Autowired MarketRepository repo;

  @Test
  void savesAndFinds() {
    MarketEntity entity = new MarketEntity();
    entity.setName("Test");
    repo.save(entity);

    Optional<MarketEntity> found = repo.findByName("Test");
    assertThat(found).isPresent();
  }
}

Skill 推荐使用 Testcontainers 复用 Postgres/Redis 等容器,最大程度还原生产环境,并通过 @DynamicPropertySource 自动注入连接信息,保证测试环境一致性。

Step 6:断言与测试数据构建

  • 推荐使用 AssertJ 的 assertThat,提升可读性
  • JSON 响应断言用 jsonPath
  • 异常断言用 assertThatThrownBy(...)
  • 复杂对象建议用 Builder 模式生成测试数据
java
class MarketBuilder {
  private String name = "Test";
  MarketBuilder withName(String name) { this.name = name; return this; }
  Market build() { return new Market(null, name, MarketStatus.ACTIVE); }
}

Step 7:持续集成与命令行执行

Skill 自动生成常用测试命令,方便在 CI/CD 中集成:

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

Skill 还会提醒你保持测试快速、隔离、确定性,聚焦行为而非实现细节。

3. 输出示例

AI 助手生成的预期输出:

  • 针对新功能自动生成完整的单元、Web、集成和持久化测试骨架
  • 自动补全测试数据构建器、断言表达式
  • 集成 JaCoCo 配置,输出覆盖率报告,低于阈值时自动提示补测
  • 一键生成 Testcontainers 配置,保证测试环境与生产一致

4. 常见配套 Agent 与 Skill 协作

如需了解更多 Claude Code 的 Skill/Agent 体系与自动化 Hook,可参考 Everything Claude Code 完全指南Claude Code 快速上手指南

FAQ

Q: Skill 生成的测试能覆盖哪些层级?
A: 覆盖单元测试(Service/Repository)、Web 层(Controller)、集成测试(SpringBootTest)、持久化(DataJpaTest + Testcontainers),并支持覆盖率校验。

Q: 如何保证测试环境与生产一致?
A: 推荐用 Testcontainers 复用 Postgres/Redis 容器,Skill 自动注入连接参数,最大程度还原生产环境。

Q: Skill 支持哪些断言与测试工具?
A: 默认集成 AssertJ 断言、MockMvc Web 测试、Mockito Mock、JaCoCo 覆盖率,支持主流 Spring Boot 测试生态。