跳转至

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 很容易被掩盖掉。