$ loading_
帮助你为 Spring Boot 项目实施测试驱动开发、修复缺陷并安全重构。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "springboot-tdd" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/ja-JP/skills/springboot-tdd/SKILL.md 2. 保存为 ~/.claude/skills/springboot-tdd/SKILL.md 3. 装好后重载技能,告诉我可以用了
请用 Spring Boot、JUnit 5、Mockito 和 MockMvc 为“创建订单”接口设计测试驱动开发流程。先给出失败的测试用例,再给出最小实现代码,最后补充重构建议。
一套按红绿重构步骤展开的测试与实现方案,包含接口测试、服务层 mock 测试和重构建议。
我在 Spring Boot 项目中发现用户状态更新接口会错误覆盖空值。请先编写一个能复现问题的 JUnit 5 回归测试,再提供修复代码,并说明为什么这样改不会影响现有功能。
包含缺陷复现测试、修复后的核心代码以及变更影响说明的完整回归修复方案。
请使用 Testcontainers 为 Spring Boot 的用户仓库层编写集成测试,验证 PostgreSQL 环境下的保存、查询和唯一约束行为,并补充 JaCoCo 覆盖率建议。
可执行的仓库层集成测试示例,涵盖容器配置、断言场景与覆盖率优化建议。
80%以上のカバレッジ(ユニット+統合)を持つSpring Bootサービスのためのテスト駆動開発ガイダンス。
@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());
}
}
パターン:
@ParameterizedTestを使用@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
@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
@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();
}
}
@DynamicPropertySource経由でJDBC URLをSpringコンテキストに注入Mavenスニペット:
<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>
assertThat)を優先jsonPathを使用assertThatThrownBy(...)class MarketBuilder {
private String name = "Test";
MarketBuilder withName(String name) { this.name = name; return this; }
Market build() { return new Market(null, name, MarketStatus.ACTIVE); }
}
mvn -T 4 test または mvn verify./gradlew test jacocoTestReport覚えておいてください: テストは高速で、分離され、決定論的に保ちます。実装の詳細ではなく、動作をテストします。
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助开发者为 Quarkus 3.x 服务实施测试驱动开发、修复缺陷并安全重构。