Test-Driven Development Skill logo

Test-Driven Development Skill

打开

先编写测试,观察失败,再编写最小代码通过测试 - 通过 TDD 方法论确保代码质量。

分享:

测试驱动开发 (TDD)

来自 Superpowers 项目的测试驱动开发 Skill,强制执行 TDD 方法论:先编写测试,观察失败,再编写最小代码通过测试。该 Skill 通过系统化的测试流程确保代码质量和测试覆盖率。

核心原则

如果你没有观察到测试失败,就无法确定它测试了正确的内容。

这是 TDD 的核心理念:必须先看到测试失败(红色),然后通过编写代码使其通过(绿色),最后进行重构。这个循环确保测试真正验证了代码的行为。

TDD 循环

1. 红色(Red)- 编写失败的测试

编写一个测试,描述期望的行为。运行测试,确认它失败。失败证明测试正在检查正确的内容。

2. 绿色(Green)- 编写最小代码

编写刚好足够的代码使测试通过。不要过度设计或添加额外功能。专注于满足当前测试的需求。

3. 重构(Refactor)- 改进代码

在测试通过后,改进代码质量。消除重复,提高可读性,优化结构。测试保证重构不会破坏功能。

何时使用

始终使用 TDD

新功能开发:为新功能编写测试,驱动设计和实现。测试先行确保功能的可测试性和清晰的接口。

Bug 修复:先编写重现 bug 的测试。测试失败证明 bug 存在。修复后测试通过,防止 bug 再次出现。

重构:在重构前确保有完整的测试覆盖。测试作为安全网,确保重构不改变行为。

行为变更:修改现有功能时,先更新或添加测试。测试描述新的期望行为。

例外情况(询问人类伙伴)

一次性原型:快速验证概念的原型代码。如果原型会变成生产代码,应该补充测试。

生成的代码:自动生成的代码(如 ORM 模型、API 客户端)。但生成代码的使用逻辑仍需测试。

配置文件:纯配置文件(JSON、YAML 等)。但配置的加载和验证逻辑需要测试。

TDD 的好处

设计改进:测试先行迫使思考接口和依赖。导致更模块化、可测试的设计。

文档作用:测试描述代码的预期行为。新团队成员通过测试了解代码用途。

回归防护:测试防止已修复的 bug 再次出现。保护代码免受意外破坏。

重构信心:完整的测试覆盖使重构更安全。可以大胆改进代码,测试会捕获错误。

调试效率:测试失败精确指出问题位置。减少调试时间,快速定位问题。

实践指南

小步前进:每次只添加一个小测试。保持测试和实现的增量进行。

测试行为而非实现:测试公共接口和行为,不测试内部实现细节。这使重构更容易。

保持测试简单:每个测试应该清晰、简洁、易于理解。复杂的测试难以维护。

快速反馈:测试应该快速运行。慢测试会打断开发流程。

独立测试:每个测试应该独立运行。测试之间不应有依赖关系。

应用价值

该 Skill 通过强制执行 TDD 方法论,显著提升代码质量和可维护性。测试先行的方法确保代码从设计之初就是可测试的,避免了后期补充测试的困难。

对于团队开发,TDD 提供了一致的开发流程和质量标准。测试作为活文档,帮助团队成员理解代码意图。完整的测试覆盖使代码库更加稳定和可靠。

通过系统化的测试流程,该 Skill 帮助开发者养成良好的测试习惯,构建高质量、易维护的代码库。

评论

还没有评论。成为第一个评论的人!