为什么我应该喜欢存根而不是模拟?
Why should I favour stubs over mocks?
我经常读到应该避免模拟而更喜欢存根。
像 FakeItEasy 和 NSubstitute 这样的隔离框架使得在大多数情况下模拟或存根依赖变得非常容易。这些框架本身不区分存根或模拟,而是将它们统称为假货或替代品。据我所知,在“模拟”的早期,创建模拟对象非常困难,因为使用了繁琐的记录和重播机制。不过今天好像没什么太大区别了
那么为什么我更喜欢存根而不是模拟呢?为什么模拟比存根更脆弱?
至少使用最近的模拟工具,没有必要为存根和模拟而烦恼。实际上,当由模拟库创建时,模拟和存根是一回事。这就是它应该的样子。
使用可用于 Java 的模拟库(如果我没记错的话,也可用于 C#.NET),您无法创建 "just" 存根。您总是 得到一个可以验证预期的模拟对象。
你不应该 'prefer' 存根超过模拟;相反,您应该 select 适合这项工作的工具:
我经常读到应该避免模拟而更喜欢存根。
像 FakeItEasy 和 NSubstitute 这样的隔离框架使得在大多数情况下模拟或存根依赖变得非常容易。这些框架本身不区分存根或模拟,而是将它们统称为假货或替代品。据我所知,在“模拟”的早期,创建模拟对象非常困难,因为使用了繁琐的记录和重播机制。不过今天好像没什么太大区别了
那么为什么我更喜欢存根而不是模拟呢?为什么模拟比存根更脆弱?
至少使用最近的模拟工具,没有必要为存根和模拟而烦恼。实际上,当由模拟库创建时,模拟和存根是一回事。这就是它应该的样子。
使用可用于 Java 的模拟库(如果我没记错的话,也可用于 C#.NET),您无法创建 "just" 存根。您总是 得到一个可以验证预期的模拟对象。
你不应该 'prefer' 存根超过模拟;相反,您应该 select 适合这项工作的工具: