程序员如何做「自动化测试」:不是负担,是护城河
自动化测试是代码质量的护城河。
没有自动化测试的代码,每次修改都胆战心惊;有了测试,才能放心重构和发布。
一、测试金字塔
1. 单元测试(底部)
- 测试单个函数、类
- 最多,最快,最便宜
- 开发者自己写
2. 集成测试(中部)
- 测试多个组件协作
- 中等数量,中等速度
- 如:测试数据库操作、API 调用
3. 端到端测试(顶部)
- 测试完整业务流程
- 最少,最慢,最贵
- 如:Selenium 自动化浏览器
二、单元测试怎么写
1. AAA 模式
- Arrange:准备测试数据
- Act:执行被测方法
- Assert:验证结果
2. 测试替身
- Mock:模拟对象
- Stub:预设返回值
- Spy:部分 Mock
3. 好的单元测试特征
- 快速(毫秒级)
- 独立(不依赖其他测试)
- 可重复(每次结果一致)
- 自描述(测试名说明测了什么)
三、测试覆盖率高就好吗
1. 覆盖率不是目标
- 100% 覆盖率 ≠ 没有 bug
- 覆盖率高但测试没断言 == 没用
2. 关注关键路径
- 核心业务逻辑
- 边界条件
- 错误处理
四、测试驱动开发(TDD)
1. 红绿重构
- Red:写一个跑不通的测试
- Green:写最少的代码让测试通过
- Refactor:重构代码
2. TDD 好处
- 先思考需求和接口
- 代码天然可测试
- 有测试保护
五、常见错误
❌ 不写测试
"功能紧,先上线再说"——后期维护成本更高。
❌ 测试不稳定
有时候 Pass 有时候 Fail = 没有人信测试。
❌ 只测 happy path
测正常情况不测异常,不测边界条件。
❌ 测试和代码一样烂
测试代码也要可读、可维护。
六、一句话总结
自动化测试 = 单元测试 + 集成测试 + 端到端测试,关注关键路径而不是覆盖率数字。