在软件工程中,**Seam(接缝)**是指代码中可以被替换、隔离或独立验证的边界。这个概念因 Michael Feathers 的《修改代码的艺术》(Working Effectively with Legacy Code)而广为人知。
通俗地说,Seam 就是我们测试系统时选定的“切入点”:
- 从哪里输入数据;
- 从哪里观察结果;
- 哪部分作为一个整体测试;
- 哪些内部实现细节不需要关注。
示例:小程序登录
微信登录 code
↓
认证模块
↓
登录成功 / 需要绑定手机号 / 登录失败
这里可以把“认证模块”作为一个测试边界:
- 输入微信登录凭证;
- 检查返回的登录状态和 Token;
- 不关心模块内部用了几个函数、变量如何命名。
常见的 Seam
- API 请求层与业务逻辑之间;
- 服务层与数据库之间;
- 页面与状态管理模块之间;
- 第三方服务与应用代码之间;
- 微信登录接口与认证模块之间。
为什么需要 Seam?
合理选择测试边界可以:
- 隔离数据库、网络和第三方服务;
- 让测试更容易编写和定位问题;
- 避免测试依赖内部实现细节;
- 让代码重构后仍能保留原有测试;
- 明确每项测试究竟负责验证什么。
总结
Seam 是代码中可以被隔离、替换或独立验证的接缝,它规定了测试从哪里输入、从哪里观察结果,以及测到