TDD(Test-Driven Development测试驱动开发)

TDD(Test-Driven Development,测试驱动开发)的核心思想是先写测试,后写实现代码,以极短的迭代周期推动软件设计。其标准流程即著名的 红 - 绿 - 重构(Red-Green-Refactor) 循环。


基本步骤

  1. 写一个失败的测试 (Red): 明确需求与接口设计.
    根据当前需求编写一个极小的单元测试。此时被测试的代码尚未编写或仅有空骨架,运行测试时必须失败(通常标红),以此验证测试本身是有效的,避免“写了假测试”。

  2. 用最快的方式让测试通过 (Green): 专注于功能的快速实现.
    编写刚好能让该测试通过的最少生产代码。在此阶段不需要考虑代码架构和优雅度,甚至硬编码常量也是允许的,首要目标是让测试套件变绿。

  3. 重构代码 (Refactor): 测试护航下的坏味道消除.
    在已有绿色测试的保护下,优化代码设计:消除重复代码、提取公共方法、改善命名与结构。重构期间不新增任何外部功能,并确保每次改动后所有测试依然全部通过。

  4. 重复循环 (Repeat): 小步快跑推进功能.
    挑选下一个边界条件或细分需求,回到第一步继续编写新的测试,逐步构建出完整的系统。


核心三定律

  1. 除非是为了让一个失败的单元测试通过,否则不允许编写任何生产代码。
  2. 只能编写刚好能导致失败的单元测试(编译失败也算失败)。
  3. 只能编写刚好能让当前失败测试通过的生产代码。

落地优势与常见误区

维度 TDD 带来的实际收益 常见误区 / 反模式
设计质量 强制先站在调用者视角思考 API,天然提高模块解耦性 测试过度关注内部私有实现细节,导致一改架构测试全挂
调试成本 Bug 在产生瞬间被定位,大幅缩短排错时间 一次性写太多测试或过大功能,导致跳出短反馈循环
维护文档 测试用例本身即最新、最准确的可执行设计文档 在“绿”之后跳过重构步骤,导致技术债堆积