标准答案
- 单元测试用 Mock 快速覆盖成功、失败和取消分支,但不应验证不存在的实现细节。
- Fake 数据库、队列或对象存储适合开发和集成测试,必须明确与真实服务的差异。
- 契约和集成测试验证 HTTP、消息、认证、序列化、重试和连接生命周期。
- 关键路径定期使用隔离的真实依赖或 Sandbox,避免所有测试都建立在 Mock 假设上。
题目解析
Mock 适合快速控制返回值、异常和取消,Fake 适合提供可运行的简化依赖,真实集成测试才会暴露协议、连接、超时、认证和 Schema 边界。测试层级要和风险匹配。
Mock 过度会让测试只验证实现者自己假设的接口;Fake 如果长期不对齐生产,可能让集成测试失去意义。契约测试和定期真实 Sandbox 能补足差异。
E2E 要使用隔离账号、数据和依赖,保证可清理、可重复和不影响真实用户。失败测试要能区分业务错误、环境故障和替身不一致。
常见误区
- 误区:所有测试都 Mock 网络。改正:用契约、集成和隔离 Sandbox 验证真实协议与资源生命周期。
- 误区:Fake 与生产行为长期分叉。改正:为 Fake 建立契约和差异清单,定期用真实依赖回归。
- 误区:E2E 直接连接生产数据。改正:使用隔离环境、最小权限和可清理的测试数据。