第五章 · 超出单元:金字塔、遗留代码与边界


第五章 · 超出单元:金字塔、遗留代码与边界

章节摘要:单元测试的舒适区之外,才是 TDD 的真实考场。本章跟着灯塔小组接手老系统:先搞清各层测试的配比与分工(金字塔),再给没有测试的遗留模块补上第一张安全网,然后攻克时间、异步、随机这些"测不准"的硬骨头,最后看看 BDD 与 ATDD 如何用业务语言重述同样的节律。读完你应能把前四章的功夫用到真实系统的粗糙地带。

一条主线

月度复盘会上,灯塔小组接到新任务:接手运营团队维护五年的老结算系统,半年内迁移到新架构。老系统两千个函数,测试数量是个位数;更棘手的是,凡是碰过"定时对账"的人都在斋戒式祈祷——那段代码里的时间全是现取的,谁也不知道它上次准时跑是什么时候。本章的四站就是这次接手的完整路线:先立分层的常识(别拿单元测试硬测一切),再给遗留代码织网(特征测试),然后拔掉时间与异步的钉子(替身注入),最后把需求语言和测试语言接通(BDD)。迁移项目最终没有变成灾难,靠的就是这条路线。

沿途站点

  • 测试金字塔与各层配比实操——单元、集成、端到端三层各自的职责、数量配比与失效模式;为什么倒金字塔会拖垮反馈速度,以及各层怎么用 pytest 落地。
  • 遗留代码:先补网再动刀——没有测试的旧代码怎么安全修改:接缝识别、特征测试(刻下现状)、再重构的完整工序。
  • 难缠的边界:异步、时间与随机——把不确定性注入成可控的替身:假时钟、事件循环驱动、固定种子,让"测不准"变成"测得准"。
  • BDD 与 ATDD:换一种说法写测试——Given-When-Then 的措辞校准与业务协作者参与的验收测试,同样的红绿节律,换一套贴近需求方的方言。

四站各有实战产物:分层清单、特征测试集、替身注入接缝、特性文件——读完合上书,这四样东西应该出现在你的仓库里,而不是只在笔记里。

拐点与结论

本章的转折点是"测试分层不是分类游戏,而是反馈速度的经济学":单元层管设计反馈,集成层管协作真相,端到端层管业务兜底——三层各答各的问题,混用任何两层都会让反馈变慢或变假。第二转折在遗留代码:"没有测试不能改"是个假两难,特征测试让你先刻下现状再谈好坏——恐惧来自"改了不知道改坏了什么",而基线恰好直接消灭这个未知。结论:TDD 的适用性不取决于代码新不新,而取决于你能不能为它建立快速的反馈回路——本章就是教你在最恶劣的地形上建回路,包括需求方也在场的那种。

读完你应该

  • 能为一个服务规划三层测试的职责边界与数量级配比;
  • 能用特征测试给无测试的旧函数织网,并在网内完成一次安全重构;
  • 能用假时钟、受控事件循环与固定种子把三类不确定性变确定;
  • 能写出 Given-When-Then 风格的业务验收测试并与实现层打通;
  • 能说出金字塔倒置的三种代价并对照自己的项目自查。

先决条件与本章配套

本章是前四章功夫的实战检验场:织网需要替身与夹具(第 3 章),拔时间钉子需要注入的手感(4.1 的依赖显形),BDD 需要测试当作文档来写的习惯。环境上新增两样小工具:容器运行时(集成层用)、BDD 框架(pytest-bdd,选装)。如果读这章时你的项目恰好在迁移或接手老系统,恭喜——本章就是为你此刻准备的作战地图,边读边对号入座收获最大。

下一章的接力

回路建好了,还差让机器替人守着——提交一次跑一遍、红灯挡住合并。第 6 章把循环装进流水线:pytest 生态、CI 位次与编辑器里的即时反馈。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U