Mocks 不是 Stubs

💡 原文中文,约15000字,阅读约需36分钟。
📝

内容提要

这篇文章讨论了经典主义和模拟主义两种测试风格的差异。经典主义测试使用真实对象和状态验证,而模拟主义测试使用模拟对象和行为验证。文章还讨论了测试与实现的耦合、设计风格和测试隔离等方面的差异。无论选择哪种风格,了解这些差异对于理解测试驱动开发和使用模拟对象框架是有帮助的。

🎯

关键要点

  • 经典主义测试使用真实对象和状态验证,模拟主义测试使用模拟对象和行为验证。

  • Mock对象是测试中模拟真实对象的特例,促进基于行为验证的测试。

  • 经典风格和模拟主义风格在测试和设计交互方式上存在根本差异。

  • 经典测试使用真实的外部依赖,模拟测试则使用Mock进行操作。

  • 状态验证通过检查对象状态来验证执行结果,行为验证则通过检查方法调用来验证。

  • 使用Mock对象的测试需要设置预期,验证这些预期是否被调用。

  • 模拟主义测试强调行为驱动开发,关注系统的外部接口设计。

  • 经典TDD倾向于使用真实对象,模拟主义TDD则倾向于使用模拟对象。

  • 测试隔离在模拟主义测试中更容易,经典测试可能导致多个测试失败。

  • 测试与实现的耦合在模拟主义测试中更明显,可能影响重构的复杂性。

  • 设计风格的差异影响了开发者的设计决策,模拟主义者更倾向于使用角色接口。

  • 了解经典主义和模拟主义的差异有助于更好地理解测试驱动开发的实践。

➡️

继续阅读