🧠 图解记忆:把外部依赖收口成端口,测试注入可控适配器;点击图片可查看原图。
| 外部依赖 | 隔离手段 | |----------|----------| | 数据库 | 内存库(SQLite `:memory:` / H2)+ 测试容器(Testcontainers)跑真实引擎 | | 网络 | HTTP 层用 stub/mock,或起本地 WireMock 假服务 | | 时间 | 注入 Clock 接口,测试里传固定时间,禁止直接 `time.Now()` | | 文件 | 临时目录 + 跑完删除,用 `tmp_path` 这类自带清理的 fixture |一句话原则: 所有外部依赖都走"接口 + 替身",被测代码不感知测试环境。
面试话术:
"外部依赖一律走接口注入:数据库用内存库或 Testcontainers,网络用 stub 或 WireMock,时间用 Clock 注入,文件用自带清理的临时目录。被测代码根本不感知自己在测试环境里。"
