章节摘要:本章跟着灯塔小组开工。他们接到电商结算后端的需求,动手写的却是会失败的测试,而不是产品代码。沿着这条线,你装好 pytest、写出第一个红灯、读懂失败输出、用最小实现转绿,并顺手判断手头的活儿适不适合这么干。本章解决的问题是:TDD 的节律到底怎么落地,以及为什么值得落地。
灯塔小组接到的任务是"购物车结算":空的购物车总额为零,加商品算小计,会员再打折。需求方催得急,常规做法是开个编辑器闷头写 Cart 类,写完手动点几下页面验证。本章带你走另一条路:先把"空购物车总额为零"翻译成一段 pytest 测试,运行它,亲眼看它红;再写几行刚好让测试通过的实现;最后回头看一眼刚写的代码,把不顺眼的地方收拾掉。全程不超过十分钟,但这条"红、绿、重构"的循环就是后面六章反复使用的发动机。
本章最关键的认知转折在"先让测试失败"那一站:多数人以为测试是验证工具,写完代码才用;TDD 把它翻转成需求工具——测试先于实现存在,失败就是"该做的事还没做"的待办清单。想通这一点,后面所有技术(替身、金字塔、遗留代码改造)都只是这个翻转在不同场景下的延伸。翻转的另一面同样重要:从此你对"完成"的定义变了——测试绿之前,功能不存在;这不是洁癖,是把"我以为做完了"换成"机器证明做完了"。结论也很干脆:TDD 的收益来自循环转得快、转得密,而不是测试写得漂亮。
本章不需要任何 TDD 前置知识,需要的只有三样:能读写 Python 基础语法(函数、类、断言)、终端里能执行命令、以及一个允许失败的实验心态。配置环节全在 1.1 节给出,五分钟内可以完成。概念速查表先行放在这里,读不动的读者按需回翻:
| 概念 | 一句话解释 | 详见 |
|---|---|---|
| 红 | 会失败的测试,需求的待办形态 | 1.1 |
| 绿 | 最小实现让测试通过 | 1.1 |
| 重构 | 不改行为的结构整理 | 1.1、第 2 章 |
| 三定律 | 无红灯不写码、只写刚好失败的测试、只写刚好通过的代码 | 1.1、2.4 |
| 适用象限 | 按需求清晰度与代码寿命判断值不值得 | 1.3 |
本章的循环只跑了个最简场景:一步红、一步绿、还没真正动过重构。第 2 章把循环整个跑起来——红灯怎么切需求、绿灯怎么守住"最小"、重构手法怎么挑,还会用密码校验器做三轮完整演练。