RSpec中的stub_model和mock_model有什么区别?

时间:2012-09-12 10:41:51

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 rspec-rails

RSpec中stub_modelmock_model之间有什么区别?到目前为止,我知道存根用于阻止实际方法被调用并返回预定义值,而模拟实际上是期望并要求在接收器上调用该方法。

我也知道这些存根/模拟用于允许隔离测试,例如在控制器中不触及模型。但我仍然对这两种方法感到困惑,究竟每种方法都使用了吗?非常感谢细节和例子。非常感谢!

1 个答案:

答案 0 :(得分:12)

stub_model

  

stub_model方法生成活动模型模型的实例。

     

虽然您可以在任何示例(模型,视图,控制器,帮助器)中使用stub_model,但它在视图示例中特别有用,它们本质上比基于交互的状态更基于状态。

mock_model

  

mock_model方法生成测试双,其作用类似于活动模型   模型。这与生成真实ActiveModel类的实例的stub_model方法不同。

     

mock_model优于stub_model的好处是它是一个真正的双重,因此示例不依赖于行为(或错误行为),甚至不依赖于任何其他代码的存在。   如果您正在处理控制器规范并且需要一个不存在的模型,则可以传递mock_model一个字符串,生成的对象就像它是该字符串所指定的类的实例一样。 / p>

rspec docs:stub_modelmock_model