用途
该技能用于在软件开发中应用测试驱动开发(TDD)方法论,遵循红-绿-重构(Red-Green-Refactor)循环。它强调 TDD 不是关于测试,而是通过小步、有纪律的步骤进行设计。
适用场景包括:用户明确要求 TDD(如“use TDD”“test first”“test-driven”);实现新功能;修复缺陷(先写一个能复现缺陷的失败测试);重构现有代码(先确保已有测试)。
主要能力
技能定义了三条不可违反的法则:
- 没有失败的测试,就不写任何生产代码。
- 只写足以展示一个失败的测试。
- 只写足以让该测试通过的代码。
流程分为三个阶段:
- RED(写失败测试):写一个定义期望行为的测试;运行测试并验证其失败;确认失败原因正确(不是语法错误);此时不写实现。需要提供包含失败信息的测试输出作为证据。
- GREEN(最小实现):写最小代码使测试通过;抵制添加额外功能的冲动;运行测试并验证通过;若仍失败,修复实现而非测试。需要提供通过的测试输出作为证据。
- REFACTOR(清理代码):消除重复(DRY);改进命名;将复杂逻辑提取为函数;运行所有测试并保持通过;检查变更行的测试覆盖率。需要提供重构后所有测试仍通过的证据。
完成一个循环后,为下一个行为开始新的 RED 阶段。
使用方式
技能给出了工作流示例,任务为“添加用户登录功能”:
RED 阶段:写测试 test_login_with_valid_credentials();运行 pytest -v 得到 FAILED(登录函数不存在);证据为“FAILED - AttributeError: 'User' has no 'login'”。
GREEN 阶段:写最小的 login() 方法;运行 pytest -v 得到 PASSED;证据为“1 passed in 0.03s”。
REFACTOR 阶段:将密码哈希提取为单独函数;改进变量名;运行 pytest -v 仍为 PASSED;证据为“1 passed in 0.02s”。
下一个循环:test_login_with_invalid_credentials()。
技能还提供了测试模式:Arrange-Act-Assert(AAA)和 Given-When-Then(BDD 风格),并附有代码示例。
适用场景
适用于需要以测试先行方式实现功能、修复缺陷或重构代码的开发场景,尤其适合用户明确要求 TDD 时。
限制与注意事项
技能列出了常见错误:一次写多个测试;跳过重构阶段;先实现后测试;在 GREEN 阶段过度工程。反模式包括:写立即通过的测试;测试实现细节而非行为;为“简单”代码跳过测试;因赶时间而在实现后补测试;一次验证多件事的大测试。正确做法是每个测试验证一个行为、测试名称描述行为、测试相互独立、测试运行快速(模拟外部依赖)。
技能还说明了与其他技能的集成:pre-task-checkpoint、evidence-reasoning、completion-discipline、verification-calibration、clarifying-questions。并提供了自检清单,用于在阶段转换前确认测试确实失败、失败原因正确、测试名称描述行为、实现最小、无过早优化、代码整洁、所有测试通过。
元原则:TDD 是一种设计技术,不是测试技术。循环始终是 RED → GREEN → REFACTOR → Repeat。先写测试迫使你思考:需要什么行为?如何知道它有效?最简单的实现是什么?这会产生设计更好、更易维护的代码。