标准答案

  1. 单元测试覆盖纯业务规则、状态转换、边界条件和错误分支,不依赖真实网络或数据库。
  2. 集成测试覆盖数据库、缓存、消息、框架配置和外部适配层的真实交互。
  3. 契约测试覆盖服务之间的接口承诺,防止请求或响应在独立发布时漂移。
  4. 端到端测试覆盖少量关键业务流程,例如注册、下单、支付回调和权限变更,不适合穷举所有分支。

题目解析

把所有测试都做成端到端,会让流水线慢、失败不可解释;只做单元测试,又可能忽略配置和基础设施问题。分层是速度与真实性的平衡。

每一层都应该有明确失败含义。测试失败后能判断是规则错、依赖错、接口约定错,还是整条旅程断了,才有维护价值。

常见误区

  • 为了覆盖率给私有实现细节写脆弱测试,重构后大量无意义失败。
  • 集成测试依赖共享且不可控的环境,导致结果不稳定。
  • 端到端测试数量无限膨胀,最终没人愿意维护。

作者信息