java-integration-testlisted
Install: claude install-skill BaixuanZhu/skills
# Java 集成测试
面向 Java/Spring Boot 的**集成测试 / 冒烟测试 / API 级 E2E** 助手。本技能提供从切片测试到全量集成的完整工具链,每条规则含「✗ 错误做法 → ✓ 正确做法」——核心是消灭 curl 仿真测试(无断言 / 不可重复 / 不��版本控制,详见铁律 1 + `references/01`)。
## 三条铁律
1. **curl 不是测试**:测试必须有结构化断言(HTTP status + response body + jsonPath),而非"看起来返回正常"。curl 是调试工具,不是测试工具——它没有断言、不可重复、不进版本控制、无隔离。
2. **选对层次**:切片测试(`@WebMvcTest`/`@DataJpaTest`)秒级启动,够用就不用全量 `@SpringBootTest`。单层逻辑用 `@Mock`+`@InjectMocks`(→ java-unit-test),跨层协作用集成测试——不越界、不滥用全量上下文。
3. **隔离优先**:测试间数据不污染。`@Transactional` 回滚(注意失效场景)、Testcontainers 重置、`@Sql` 清理——一个测试的副作用不能影响另一个。
## 快速入门
| 你想做的 | 看这份 | 读多少 |
|---|---|---|
| 不知道用哪种测试 / curl 该不该用 | `references/01` 测试层次 + curl 反模式 | 各前 40 行 |
| 写 @SpringBootTest / MockMvc / WebTestClient | `references/02` | 通读 |
| 只测单层 Controller 或 Repository(切片) | `references/03` | 通读 |
| 用真实数据库 / Redis / Kafka 测 | `references/04` | 通读 |
| 写 API 断言(REST Assured given/when/then) | `references/05` | 通读 |
| 测试隔离 / @Transactional 失效 / WireMock | `references/06` | 通读 |
| 冒烟测试 / 多接口串联 E2E | `references/07` | 通读 |
| 跑测试烧 token / 反复全量 / 输出太多 | `references/08` | 通读 |
> `01` 根文件(选层次前必读);`02`-`05` 工具链落地;`06` 隔离陷阱;`07` 冒烟与 E2E;`08` 执行效率。
## 第 0 步:探测项目与场景(激活时先执行)
读项目 `pom.xml` / `build.gradle` 和测试代码,一次性判断:
1. **工具栈**:
- Spring Boot 版本(`pom.xml` 读 `spring-boot-starter-parent`)→ 决定 `@ServiceConnection` 可用性(3.1+)、命名空间(`javax.*` vs `jakarta.*`)、HTTP 测试客户端选型(≤3.x:TestRestTemplate 可用;4.x:TestRestTemplate 废弃,用 RestTestClient——依赖坐标与迁移见 `references/02`)。
- 是否已有 `testcontainers` 依赖(`grep te