Rails固件与模拟的比较

11

我正在开发一个Rails应用,今天与同事聊天时发现我们的测试中混合了fixture和mock。我们使用的是cucumber和Rspec。问题是:应该在什么情况下使用每个呢?


1
有点偏离主题,但一个非常好的替代 fixtures 的选择是 factory_girl(也可以与 fixtures 并用)。 http://github.com/thoughtbot/factory_girl#readme 这里有一个关于使用的 Railscast http://railscasts.com/episodes/158-factories-not-fixtures - house9
1个回答

18
当使用真实对象不可行/不必要时,我会使用模拟对象。例如,假设您需要调用一些远程API,比如通过邮政编码查找地址。您可能希望模拟该对象,以便在每次运行测试时不会实际进行对其的调用。还有其他原因,比如提高速度,在需要精确响应的数据发生更改的情况下请求数据,或者可能尚不存在。它允许您在隔离中测试事物,因为您可以确定当您在此模拟对象上调用这些方法时,您将得到这个结果,而且对于此测试来说,实际运行代码并不重要。
如果您使用固定装置,则会有一个真实的对象,并且将调用它们的方法等,并运行它们的代码,除非当然您截断了这些方法,这是另一个问题。
希望这能有所帮助。关于模拟和存根,有一个很好的peepcode(http://peepcode.com/products/rspec-mocks-and-models),也许可以看看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接