用途:把使用 unittest.mock.patch / MagicMock 的测试重构为 erk 的 gateway-based fake 模式,适用于测试导入 unittest.mock、使用 @patch 装饰器或 mock subprocess 的场景。核心思路是让源码注入 gateway 依赖,测试中配置预置响应的 fake。
主要流程:1)审计 mock 使用,记录每个 patch 的目标、系统边界、模拟内容与返回值,并按测试分组;2)发现合适的 gateway,按工具(如 Claude CLI、gh、cmux、git)而非 subprocess 机制匹配,优先覆盖同一测试全部 mock 的最高层抽象;3)规划注入点与生产接线;4)将源码改为构造参数注入 gateway(仅命名参数、无默认值、存为 self._gateway),Click 命令则用 require_github(ctx)/require_context(ctx) 从上下文获取;5)无现有 gateway 时按 3-file(abc/real/fake)或 5-file 模式新建,并接入 ErkContext;6)改写测试,用可配置的 fake 替换 patch,断言改为检查 fake 记录的调用;7)用 uv run pytest <test_file> -v 验证并做 lint、类型检查。
限制与注意:不要停在最底层匹配的 gateway,subprocess.run 不是合适的边界,gateway 应按被调用工具命名;monkeypatch.delenv 属 pytest fixture,可保留;新增构造参数后必须更新 context.py 生产接线;无资料说明支持的语言、版本或平台范围。