为单元测试编写模拟应该在单独的提交中吗?

Should writing mocks for unit tests be in a separate commit?

提交没有人使用的代码是个坏主意,因为审阅者很难理解为什么要这样写,也很难知道代码是否正确。

因为我在用 TDD 编写代码,所以在编写代码逻辑之前我会编写单元测试。
测试有时依赖于新的模拟,它们的第一个(也是唯一)用途是测试。应用上述原则,我不想自己提交模拟。因此,我最终在同一提交中提交了单元测试和模拟。

这使得提交变得相当长,并且模拟感觉不像是其中的一部分。将它们放在不同的提交中会更好(甚至可能让不同的开发人员审查它,更好地理解模拟代码)。

我知道这个设计问题可能是个人喜好问题,但我是 TDD 的新手,感觉可能有一种解决方案比另一种更正确。
任何输入将不胜感激。

关于 Git 提交的最重要的政策是 每个提交都应该通过构建 。有人可能会争辩说,对于 TDD,提交 red/green/refactor 周期的每一步是有意义的,如下所示:

  • 红色,提交(但不要这样做)
  • 绿色,提交
  • 重构,提交

但是,如果您在红色上提交,您的提交将导致构建失败,这将很好地利用例如git bisect不可能。我认为可以从 greenrefactor 阶段中单独提交,如果你愿意的话,但如果你能保持每个整体变化很小,这不是最重要的。

如果您可以在添加测试之前添加模拟,并且构建仍然通过,我认为这是可以接受的做法。这不是我自己会做的事情,但我不认为这会是个问题。

通常,审阅者会查看多个提交的组合差异,因此这不太可能造成混淆。

不过,对于 TDD,最常见的过程是 首先 编写测试,然后编写足够的代码使测试通过。如果其中包括模拟,则将它们添加为对测试的反应。

如果您发现它会产生一些粗粒度的提交,那么这就是 TDD 过程给您的反馈。反馈并不是说您对该过程的应用一定是错误的,而是您可能会从重新考虑您的 API 设计中受益。