TDD 精通
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/tdd-mastery-sh-9zy6bi
技能介绍
为什么测试经常变成维护负担
很多团队写了测试,但测试变得脆弱、慢、且掩盖 bug。开发者为了覆盖率写测试,测试通过但删掉代码也通过(tautological tests)。缺乏纪律,跳过 TDD 的 Red 阶段,直接写实现代码。
核心循环与工程实践
TDD Mastery 回归经典的 Red-Green-Refactor 循环。
- Red: 先写一个失败的测试定义期望行为。
- Green: 写最小代码让测试通过。
- Refactor: 在测试绿灯下清理代码。
每个循环控制在 2-10 分钟。
在结构上,强制使用 Arrange-Act-Assert 模式,命名遵循 test___ 或 it("should when ")。
针对不同语言:
- Jest / Vitest: 推荐
vi.fn()或jest.fn()做 mock,优先依赖注入,beforeEach隔离状态。 - pytest: 使用
pytest.raises处理异常,conftest.py共享 fixture,用@pytest.mark.slow标记慢测试。 - Go: 默认使用表驱动测试,
t.Helper()辅助工具函数。
测试分层建议遵循 70% 单元、20% 集成、10% E2E 的比例。
边界与避坑指南
虽然强调覆盖率(CI 强制 80% line coverage),但核心是测试行为而非刷数字。
Mock 应限制在边界(HTTP、DB、FS、Clock),不要 mock 被测单元本身。仓库层优先使用 fake 而非 mock。
最后,坚决避免以下反模式:
- 测试实现细节而非行为
- 删掉代码测试依然通过
- 测试间共享可变状态
- 忽略 flaky tests
- 直接测试私有方法
使用场景
- 为新功能编写测试,先写失败用例再实现代码
- 在 CI 中配置覆盖率规则,确保分支覆盖达标
- 重构遗留模块时保持测试通过,防止回归
- 统一多语言项目的测试结构与命名规范
适合人员
- 前端/Node 工程师,需要规范 Jest/Vitest 的 mock 与测试结构
- Python 后端工程师,希望用 pytest 建立可靠的测试基线
- Go 服务开发者,想引入表驱动测试和清晰的测试分层
- 团队 Tech Lead,关注覆盖率质量与 TDD 纪律落地