章节摘要:单元测试的舒适区之外,才是 TDD 的真实考场。本章跟着灯塔小组接手老系统:先搞清各层测试的配比与分工(金字塔),再给没有测试的遗留模块补上第一张安全网,然后攻克时间、异步、随机这些"测不准"的硬骨头,最后看看 BDD 与 ATDD 如何用业务语言重述同样的节律。读完你应能把前四章的功夫用到真实系统的粗糙地带。
月度复盘会上,灯塔小组接到新任务:接手运营团队维护五年的老结算系统,半年内迁移到新架构。老系统两千个函数,测试数量是个位数;更棘手的是,凡是碰过"定时对账"的人都在斋戒式祈祷——那段代码里的时间全是现取的,谁也不知道它上次准时跑是什么时候。本章的四站就是这次接手的完整路线:先立分层的常识(别拿单元测试硬测一切),再给遗留代码织网(特征测试),然后拔掉时间与异步的钉子(替身注入),最后把需求语言和测试语言接通(BDD)。迁移项目最终没有变成灾难,靠的就是这条路线。
四站各有实战产物:分层清单、特征测试集、替身注入接缝、特性文件——读完合上书,这四样东西应该出现在你的仓库里,而不是只在笔记里。
本章的转折点是"测试分层不是分类游戏,而是反馈速度的经济学":单元层管设计反馈,集成层管协作真相,端到端层管业务兜底——三层各答各的问题,混用任何两层都会让反馈变慢或变假。第二转折在遗留代码:"没有测试不能改"是个假两难,特征测试让你先刻下现状再谈好坏——恐惧来自"改了不知道改坏了什么",而基线恰好直接消灭这个未知。结论:TDD 的适用性不取决于代码新不新,而取决于你能不能为它建立快速的反馈回路——本章就是教你在最恶劣的地形上建回路,包括需求方也在场的那种。
本章是前四章功夫的实战检验场:织网需要替身与夹具(第 3 章),拔时间钉子需要注入的手感(4.1 的依赖显形),BDD 需要测试当作文档来写的习惯。环境上新增两样小工具:容器运行时(集成层用)、BDD 框架(pytest-bdd,选装)。如果读这章时你的项目恰好在迁移或接手老系统,恭喜——本章就是为你此刻准备的作战地图,边读边对号入座收获最大。
回路建好了,还差让机器替人守着——提交一次跑一遍、红灯挡住合并。第 6 章把循环装进流水线:pytest 生态、CI 位次与编辑器里的即时反馈。