单元测试适合验证纯业务规则,运行快且定位准确;集成测试验证数据库、消息队列和序列化等真实边界;端到端测试覆盖少量关键用户流程。
不要过度模拟
如果测试把数据库、事务和序列化全部 mock 掉,它只能证明 mock 之间能协作。对于 SQL 和数据约束,使用真实数据库容器的集成测试通常更有价值。
测试应覆盖成功路径、输入边界、依赖失败和并发冲突。时间、随机数和外部调用通过显式依赖注入,让测试保持确定性。
线上事故应转化为恰当层级的回归测试,但不要为实现细节建立脆弱断言。好的测试允许安全重构,并在行为真正改变时给出清楚反馈。