【问题标题】:What's the difference between stub_model and mock_model in RSpec?RSpec 中的 stub_model 和 mock_model 有什么区别?
【发布时间】:2012-09-12 10:41:50
【问题描述】:

RSpec 中的stub_modelmock_model 有什么区别?到目前为止,我知道存根只是用来防止调用真正的方法并返回一个预定义的值,而模拟实际上是期望并要求在接收者上调用该方法。

我也知道这些存根/模拟用于允许隔离测试,例如在不接触模型的控制器中。但是我仍然对这两种方法感到困惑,究竟是什么时候使用的?细节和例子将不胜感激。非常感谢!

【问题讨论】:

  • 不确定这是否适用于您的问题,但对我有帮助的一件事是意识到 rspec“模拟”用于创建假对象,而“存根”用于创建假方法。请注意,我说的不是stub_modelmock_model,而是更通用的模拟和存根术语。

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


【解决方案1】:

存根模型

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

虽然您可以在任何示例(模型、视图、控制器、助手)中使用 stub_model,但它在视图示例中尤其有用,因为视图示例本质上是基于状态而不是基于交互。

模拟模型

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

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

rspec 文档:stub_modelmock_model

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多