自测试代码(Self-Testing Code)
代码自带自动化测试保护,可以快速发现回归和偏离行为的状态,而不是某一种具体的写法。
#type / concept
#status / growing
#tech / dev / test
[!info] related notes
- 所属 MOC: 测试驱动开发 MOC, Testing MOC
- 前置概念:
- 并列概念: 测试驱动开发(TDD)
- 易混淆概念: TDD Workflow
- 关系笔记: TDD 中测什么与测试金字塔
自测试代码(Self-Testing Code)
一句话定义
自测试代码指的是:系统本身配有自动化测试,能快速告诉你当前实现是否仍然满足预期行为。
它为什么重要
当代码库变大、改动变频繁时,最大的风险不是“写不出来”,而是“改完之后不知道有没有把别的地方改坏”。
自测试代码的价值,就是把这种不确定性压缩成一个可重复、可执行的反馈回路。
它和 TDD 的关系
- 自测试代码是目标状态
- TDD 是一种强约束的到达路径
也就是说:
- 先写代码再补自动化测试,也可能得到自测试代码
- 但只有“先写失败测试,再写最小实现,再重构”的做法,才叫 TDD
它最实际的价值
快速反馈
你可以很快知道改动有没有破坏既有行为,而不是靠手点系统和运气排查。
支持重构
当测试能覆盖核心行为时,你就敢更积极地改命名、抽依赖、拆模块。
防止 bug 回来
遇到线上 bug 时,最稳的做法通常是:
- 先写一个能稳定复现 bug 的测试
- 确认它先失败
- 再修实现
- 让它永久留在回归测试里
它不要求什么
自测试代码不要求你必须用某个框架,也不要求所有测试都来自 TDD。
它真正要求的是:
- 自动化
- 能稳定执行
- 能代表关键行为
- 反馈足够快
一个判断标准
如果你修改一个核心模块后,能在很短时间内回答“行为有没有坏”,那你就更接近自测试代码。
如果每次改动后都只能靠手工点、靠联调、靠上线观察,那就还不是。
最短记忆方式
TDD 是方法;自测试代码是结果。结果比口号更重要。