质量与测试
测试金字塔;对照 testing-essentials。
30 分钟
质量与测试
代码质量与测试 互为前提:可测的设计通常更清晰;充分的测试让重构与 Review 敢下手。本课对照 testing-essentials 的 测试金字塔,说明质量门禁里每一层测什么。
学习目标
- 用测试金字塔解释单元 / 集成 / E2E 的分工
- 将「质量习惯」映射到 CI 与 PR 要求
- 知道 Java 栈细节在 spring-boot-essentials
测试金字塔(复习)
E2E(少)
集成(中)
单元(多)
| 层 | 守护的质量 | 失败说明 |
|---|---|---|
| 单元 | 纯逻辑、边界 | 哪个函数错 |
| 集成 | DB、HTTP、配置 | 组件协作错 |
| E2E | 用户路径 | 端到端回归 |
快测多写、慢测守命门。只堆 E2E 会导致 CI 慢且 flaky,见 testing-essentials 反模式节。
质量与测试的衔接
- 重构前 → 先绿测或 characterization test(cq-refactoring)
- Review 时 → 新行为必须有断言(cq-reviews)
- PR 合并 → CI 跑
mvn verify/npm test(git-essentials + Actions)
CodeRoadMap backend 的 *ServiceTest 是单元层主力;补 MockMvc 或 Testcontainers 即集成层。
测什么算「有质量」
好测试特征:
- 命名说行为:
shouldRejectEmptySlug - Arrange-Act-Assert 清晰
- 失败信息可读:不用
assertTrue(true)
坏测试:只覆盖 happy path;Mock everything 导致「测的是 Mock」;为覆盖率数字而写。
AI 生成测试常漏边界与 negative case,人工补全见 ai-coding-essentials。
练习
- 打开 backend
src/test/java,找一个测试,评价它属于金字塔哪一层 - 为你准备改的一个方法,先写 失败 的测试再实现(TDD -lite)
- 在 PR 模板里加一条「新增/变更行为对应的测试类名」