标准答案
- 单元测试 Mock 外部调用,覆盖超时、失败、取消和重试分支。
- Fake 适合快速集成,但要持续验证与真实实现的差异。
- 契约测试固定 JSON、错误码、消息 schema 和认证边界。
- 关键路径定期在隔离环境使用真实依赖,验证连接、迁移、权限和性能。
题目解析
Mock 适合把外部依赖替换成可控行为,快速验证超时、异常、取消和重试分支;Fake 是能运行的轻量替身,适合开发和较快的集成测试;契约测试固定消费者与提供者之间的请求、响应、错误和消息 schema;真实集成测试则验证驱动、认证、迁移和运行环境。它们解决的是不同风险。
过度 Mock 会让测试只证明“代码调用了 Mock”,无法发现真实序列化、连接、权限和版本差异。Fake 也不是自动正确的实现,应该用契约或少量真实集成测试持续校准。高风险写操作还要覆盖重复、部分失败和恢复后的行为。
测试数据和凭据必须隔离。网络测试可以使用本地容器或专用测试账号,禁止把生产数据复制到开发环境;测试完成后清理队列、对象存储和数据库,避免测试本身造成副作用。
常见误区
- 误区:所有网络和数据库都 Mock。改正:用 Mock 覆盖分支,用契约和真实集成覆盖协议、驱动、权限和迁移。
- 误区:Fake 长期不跟真实服务校准。改正:为 Fake 建立契约测试,并定期运行真实依赖集成测试。
- 误区:测试直接使用生产数据和凭据。改正:使用脱敏数据、隔离账号和独立资源,测试结束后清理副作用。