我是rspec和整个TDD方法论的新手。有人能解释一下mock和stub之间的区别吗?我们什么时候使用它们,什么时候使用Factory Girl在测试用例中创建对象?
发布于 2011-09-08 07:02:42
你可以把一个mock (或替身)看作一个假对象。当您正在测试并且需要使用在测试中不易使用的对象时,您可以使用mock作为您期望该对象的行为和工作方式的近似值。存根可以以类似的方式使用,但在对象的单个方法上使用。
这里有一个相当做作的例子,它大量使用了这两种方法:
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不起作用的情况,显式地创建复杂的对象可能是乏味的。
https://stackoverflow.com/questions/7340808
复制相似问题