No Mock Policy¶
这个项目对核心 Git 行为采用非常明确的策略:不使用 mock 来替代核心仓库语义。
为什么要这么严格¶
因为这个项目不是在测试“某个函数有没有被调用”,而是在测试:
- 对象有没有真的写进对象库;
- index 有没有真的编码正确;
- refs 有没有真的原子更新;
- merge 冲突有没有真的进入冲突状态;
- pack 和远端同步有没有真的传输对象。
如果这些关键路径都被 mock 掉,测试就只能证明:
- 你的假对象配合得不错;
- 你的调用流程看起来合理;
但它不能证明真实仓库状态是对的。
这不代表完全拒绝抽象¶
no mock policy 的意思不是所有测试都必须写成最笨的长脚本。
真正的意思是:
- 不要用 mock 伪造核心 Git 行为已经成立;
- 可以写测试辅助函数;
- 可以复用临时仓库构造逻辑;
- 但对象库、index、refs、工作区这些关键状态要尽量真实运行。
为什么这对 Git 复现特别重要¶
Git 复现项目里,很多 bug 只有在真实磁盘状态下才会暴露:
- padding 对不齐;
- checksum 算错;
- ref 写入不原子;
- 工作区路径判断漏边界;
- merge stage 没进 index;
- pack 偏移和 delta 解析错误。
这些问题用 mock 很容易被掩盖掉。