1. 基本信息
| 项目 | 内容 |
|---|---|
| 名称 | testing-pyramid-rrezartprebreza-spring-boot-skills |
| 作者/维护者 | rrezartprebreza(个人开发者) |
| 来源链接 | https://github.com/rrezartprebreza/spring-boot-skills/tree/main/skills/spring-boot-4/testing-pyramid |
| 许可证 | MIT(GitHub API 获取) |
| GitHub Stars | 195(整个 spring-boot-skills 合集仓库;该数字属整个合集,不代表本技能自身热度,GitHub API 获取) |
| Forks | 35(同上,合集整体,GitHub API 获取) |
| 最新版本 | 无独立版本号;仓库整体最近一次内容修订为 2026-07-30(GitHub API 获取) |
| 安装方式 | 复制该子目录到 agent 的 skills 目录(见第 10 章) |
2. 功能介绍与亮点
这是一份面向 Spring Boot 4.x 的测试策略实战指南,教 AI 编程 agent 按“测试金字塔”比例写测试,而不是习惯性地把所有测试都写成最重的一种。核心内容:
- 金字塔结构:单元测试(无 Spring 上下文、纯 Mock,占比 70%)、切片测试(
@WebMvcTest/@DataJpaTest等局部上下文,占比 20%)、集成测试(完整上下文 + Testcontainers 真实数据库,占比 10%),并逐层给出可编译的完整代码示例 - 单元测试范例:
@ExtendWith(MockitoExtension.class)+@Mock/@InjectMocks的 service 层测试写法,正常路径与异常路径各一例 - 切片测试范例:
@WebMvcTest配合MockMvc测控制器(含@WithMockUser认证场景与参数校验失败场景);@DataJpaTest配合@AutoConfigureTestDatabase(replace = Replace.NONE)+ Testcontainers 测仓储层查询 - 集成测试范例:
@SpringBootTest全上下文启动,用 Spring Boot 4 的RestTestClient做端到端调用 - 命名规范:
方法名_条件_预期行为的统一测试命名模式 - Testcontainers 依赖声明:Maven 依赖片段可直接复制
文末附 8 条“agent 常犯错误”清单:滥用 @SpringBootTest 拖慢全套件、用 H2 内存库代替 Testcontainers 导致方言差异被掩盖、误用已在 Boot 4 移除的 @MockBean(应改 @MockitoBean)、习惯性用过时的 TestRestTemplate 而非 RestTestClient、用 Mockito.mock() 而非注解式 @Mock、控制器测试漏加 @WithMockUser 导致全部请求被安全过滤器拦截、用 JUnit 原生 assertEquals 而非更易读的 AssertJ 链式断言、测试命名不统一。全部内容为纯 Markdown 配可编译 Java 代码示例。
3. 适用场景
所属分类:工程效率与代码质量——本技能产出的是测试代码本身的结构与写法规范,属于技术栈编码指南范畴。
适合任何使用 Spring Boot 4.x(或 3.x,可切换到仓库对应分支)、用 AI 编程 agent 生成或维护测试代码的后端团队。测试金字塔比例失衡是 agent 写测试时一个不易被察觉的质量问题——测试能跑通、覆盖率数字也好看,但因为大量使用重量级的 @SpringBootTest 或真实数据库依赖,套件运行越来越慢、越来越脆弱,这类问题不会在单次代码审查中暴露,而是随着项目增长逐渐拖垮 CI。这份技能把切片选择、Spring Boot 4 测试 API 变更前置到 agent 写测试之前。
4. 跨 Agent 兼容性
- Claude Code:原生支持——仓库明确提供
.claude/skills/安装路径与徽章标注兼容 - Codex:原生支持——仓库同时提供
.codex/skills/安装路径与徽章标注兼容 - OpenClaw:未验证——SKILL.md 遵循标准 YAML front matter + Markdown 正文格式,理论上可迁移,但仓库文档未点名支持
- Hermes Agent:未验证——同上,未见任何提及
5. 推荐理由
测试金字塔比例失衡是 agent 写测试最容易被忽视的隐性质量问题:不是“测试跑不过”,而是“测试跑得过、但慢、脆、护不住真实回归”。这份技能把测试切片的选择标准(该用 @WebMvcTest 还是 @DataJpaTest 还是完整 @SpringBootTest)、Spring Boot 4 测试相关 API 的具体变更(@MockitoBean 替代 @MockBean、RestTestClient 替代 TestRestTemplate)整理成一份可直接对照的清单,并配完整可编译代码示例,对任何用 agent 编写 Spring 服务测试代码的团队都是直接可用的护栏。
6. 评分
| 维度 | 分数 | 说明 |
|---|---|---|
| 受欢迎程度 | 5 | 该技能所属子目录本身尚无独立的第三方讨论或引用证据;所属合集仓库由单一开发者维护,195 星与 35 复刻数字属整体仓库,不可归给单个子技能 |
| 可用性 | 9 | 复制单个文件夹即可安装,无需配置或付费依赖;内容随 Spring Boot 4 当前版本同步维护,仓库最近一次修订为 2026-07-30;代码示例完整可编译,覆盖依赖声明到完整用例 |
| 安全性 | 9 | 纯 Markdown 文档配代码示例,技能自身不执行任何命令、不联网、不要求任何凭据;仓库许可证明确(MIT);内容未见任何可疑指令或误导性说明 |
综合评分:7.7
7. 跟同类 Skills 相比的优势
| 项目 | 定位 | 与本技能的差异 |
|---|---|---|
| spring-boot-testing(github/awesome-copilot 合集收录) | 同样面向 Spring Boot 4 测试,拆成 11+ 份独立参考文档(测试切片总览、@WebMvcTest、@DataJpaTest、RestTestClient、AssertJ、Testcontainers、Instancio 测试数据生成、上下文缓存性能优化等) |
覆盖面更广(含 JSON 测试、REST 客户端测试、测试数据生成、套件提速技巧),但顶层文件本身是决策树+索引,需要逐份查阅子文档才能拿到完整代码;本技能单文件内嵌全部可编译示例,无需跳转即可直接抄用 |
| Spring Boot Testing(第三方 skills 市场,多个独立开发者各有收录版本) | 同类主题在生态中已有多个独立条目,说明该细分领域并不稀缺 | 具体内容深度因作者而异;本技能靠统一的“agent 常犯错误”清单框架(每条踩坑对应一条修复写法)作为区分,而非单纯的用法说明 |
| domain-driven-design-rrezartprebreza-spring-boot-skills(同一仓库) | 同仓库内的领域建模指南 | 主题互补而非重叠——一个管测试策略,一个管领域模型设计,均遵循同一仓库“agent 常见错误清单”的写法体系 |
8. 用户评价
该技能目前在第三方平台尚无具名用户评价。
9. 其他补充
仓库同时维护 Spring Boot 3 分支下的等价版本(测试注解差异如 @MockBean 在 Boot 3 仍适用,随目标框架版本调整),供仍在 Spring Boot 3.x 的团队使用。
10. 安装使用方式
Claude Code:
mkdir -p "$PROJECT_DIR/.claude/skills"
cp -r skills/spring-boot-4/testing-pyramid "$PROJECT_DIR/.claude/skills/"
Codex:
mkdir -p "$PROJECT_DIR/.codex/skills"
cp -r skills/spring-boot-4/testing-pyramid "$PROJECT_DIR/.codex/skills/"
安装后无需重启 agent,下次涉及测试代码编写或修改时会被自动读取触发;仓库同时提供 Spring Boot 3 分支的等价目录(skills/spring-boot-3/testing-pyramid),按项目实际框架版本二选一。
11. 注意事项
- 内容以 Spring Boot 4 / Spring Framework 7 测试 API 为准(如
RestTestClient、@MockitoBean),若项目仍在 Spring Boot 3.x,需改用仓库对应分支目录,两者写法存在差异 - 技能覆盖的是通用测试结构与写法规范,不含项目特定的测试数据管理策略或 CI 流水线集成建议,仍需结合具体项目调整
- 仓库由个人开发者维护,无企业组织背书,长期维护的连续性无法保证