首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟、存根和工厂女孩之间的区别是什么?

模拟、存根和工厂女孩之间的区别是什么?
EN

Stack Overflow用户
提问于 2011-09-08 05:38:05
回答 1查看 8.9K关注 0票数 32

我是rspec和整个TDD方法论的新手。有人能解释一下mock和stub之间的区别吗?我们什么时候使用它们,什么时候使用Factory Girl在测试用例中创建对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-08 07:02:42

你可以把一个mock (或替身)看作一个假对象。当您正在测试并且需要使用在测试中不易使用的对象时,您可以使用mock作为您期望该对象的行为和工作方式的近似值。存根可以以类似的方式使用,但在对象的单个方法上使用。

这里有一个相当做作的例子,它大量使用了这两种方法:

代码语言:javascript
复制
class Client
  def connect_to_server
    if Server.connect.status == 'bad'
      show_an_error
    else
      do_something_else
    end
  end
  def do_something_else; end
  def show_an_error; end
end

context "failure" do
  it "displays an error" do
    bad_network_response = double("A bad response from some service", :status => 'bad')
    Server.should_receive(:connect).and_return(bad_network_response)

    client = Client.new
    client.should_receive(:show_an_error)
    client.connect_to_server
  end
end

您可以想象使用大量模拟或存根不是一个好主意;这基本上是在测试中屏蔽部分代码,但对于一些困难/罕见的测试场景来说,这是一个简单的解决方案。

Factory Girl对于为测试生成数据非常有用。您将使用工厂作为为您的模型创建实例的配方,您可能需要测试涉及大量测试数据的东西,这将是一种使用fixture不起作用的情况,显式地创建复杂的对象可能是乏味的。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7340808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档