标准答案
- 契约测试重点验证字段、类型、必填性、状态码、错误结构和关键行为约定,生产者与消费者都可以据此校验兼容性。
- Mock 测试适合让开发者在本地脱离真实依赖快速开发和验证分支,但 Mock 本身可能与真实服务漂移。
- 端到端测试验证真实环境中的完整链路,包括鉴权、网络、配置和多个服务的协作,但成本高、定位慢。
- 合理分工是:单元测试覆盖本地逻辑,契约测试守住服务接口,少量端到端测试验证关键业务旅程。
题目解析
服务拆分后,许多故障不是单个服务代码错误,而是“调用方以为字段总有值、提供方开始返回空值”这样的约定漂移。契约测试正是为了提前暴露这一类问题。
契约只应覆盖真实且稳定的边界。把所有内部实现细节写成契约会让演进困难,也会增加维护噪音。
常见误区
- 把 Mock 返回写死后就认为接口一定兼容。
- 用端到端测试替代所有测试,导致反馈慢且失败难定位。
- 契约只验证 JSON 结构,不验证错误码、默认值和重要业务语义。