第2章 单元测试门诊:单件体检的完整工序


本章要回答的三个问题:为什么单元测试要快、要稳、要能随手开灯,这几条是有硬道理的而不是洁癖?一个函数牵扯到数据库、网络、时间的时候,怎么才能把它"关起门"测干净?拿什么工具冒充那些外部依赖,才算不越界也不漏检?

为什么会有这一章

第 1 章把"单件体检"放进地图,但地图不等于处方。一位新手第一次写单测,通常会栽在同一个坑里:测试里连了数据库、挂了网络,结果测试跑了三秒还被环境卡住,于是干脆放弃。或者反过来,把 Mock 用得满屏都是,最后没测出真实逻辑,倒是在验证自己刚编的假对象。这一章就是把单件体检的整套工序摊开:先从"为什么要快和稳"进入,再讲隔离外部依赖的根本手法,再把 Mock、Stub、Spy、Fake 这四种替身的适用边界讲清楚,最后用命名纪律和一个"反模式清单"收尾。读完你手里就有一套能直接搬回去的单元测试工序。

读完能解决什么

  • 能说清单元测试"快、稳、自动、原子"四条铁律各自对应的现实教训,而不是背口诀。
  • 能把一个依赖了数据库或时间函数的被测对象,用依赖注入和替身改造成可控的单例体检。
  • 能在 Mock、Stub、Spy、Fake 之间做正确选择,并回避"为 Mock 而 Mock"。
  • 能为自己的测试定义一套可读、可检索的命名约定,并组织进合理的目录结构。
  • 能识别并纠正至少五种单元测试的反模式,比如测内部实现、断言恒真、测试间共享状态。

各节怎么分工

节号 回答的问题 关键产出
2.1 特性、价值与原则 为什么快稳自动原子是硬底线 FIR 四条铁律的因果解释表
2.2 关起门来测 隔离外部依赖的通用手法 依赖注入改造前后代码对拍
2.3 测试替身实验室 四种替身各管哪一段 替身选择决策流程
2.4 命名纪律与组织 测试怎么命名才算好 三套命名范式与目录模板
2.5 误区与反模式 哪些写法让测试亮假绿灯 反模式清单与点击式修正

先决条件

  • 完成第 1 章,至少能画出测试分层地图。
  • 会写最基本的类与函数,理解"构造对象、调用方法"即可。
  • 任选一门语言的单测框架能跑起来(Python 的 pytest、Java 的 JUnit、JS 的 Jest 都行)。本册以 Python + pytest 为例落地,但概念全部通用。

往下走到哪

单件体检做完,只证明零件单体没问题。零件之间的接缝会不会漏电,必须交给第 3 章"集成测试会诊室"。它正好在本章补的另一半——你在这里替身用得越干净,到第 3 章判断哪些地方该换成真依赖就越有把握。

本章知识点清单

  • 能背诵并解释单元测试四条铁律(快、稳、自动、原子),各自对应哪种"若破例会怎样"的后果。
  • 能用一句话说出"闭合"才是单元判定的精髓,并区分"隔离"与"体量"作为分水的不同。
  • 能识别"内部 new 外部、static 调用、时间魔数"三类难测体征,并用手法注入改造成好测形态。
  • 能在遇到外部依赖时,依据"快、稳、贵"三问算出该不该换替身,而不盲目一刀切。
  • 能区分 Stub、Mock、Spy、Fake 四族的定位,并在同一段被测代码里正确选用且写出断言。
  • 能按某一套命名范式(条件-动作-结果 / 行为-时机 / 方法-场景-期望)为测试统一命名。
  • 能在测试出现"测实现、断言恒真、共享状态、一锅烩"等反模式时当场识别并修正。
  • 能为自己的项目组织测试目录(镜像目录、一单元一测试类、fixture 收拢),使找测试不迷路。

一章一图:单元测试门诊的工序

这条工序把 2.1 到 2.5 串成一条可重复的流水线:先认单件,再隔离,再选替身,再命名断言,最后按铁律验收。它和你学到的每一节都一一对应,也是后面写进 CI 的最小单元测试套路。

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