【问题标题】:When to write a mock object vs a Factory (FactoryGirl)何时编写模拟对象与工厂(FactoryGirl)
【发布时间】:2015-04-05 20:44:11
【问题描述】:
我有一个非常大的 Rails 代码库,我们使用了很多工厂 (FactoryGirl)。问题是,工厂女孩的一个实例创建了一个数据库事务,所以当我们运行整个测试套件时,它需要很长时间。然而,如果我们正确地使用了 Rspec 模拟,那么测试会以闪电般的速度运行,因为模拟是轻量级的——不需要数据库事务。
我的问题:您何时模拟角色、实体或对象,何时使用对象的有效实例?如果有人可以提供一个例子,那就太好了。
【问题讨论】:
标签:
ruby-on-rails-4
mocking
factory-bot
rspec-rails
factories
【解决方案1】:
我已经学会在您的测试中分解何时使用 FactoryGirl 或活动记录实例。它们应该在您的模型测试和控制器测试中使用。
模型测试——必须与数据库集成。如果您正在创建与用户实例交互的用户测试,那么您将需要用户工厂。但是,如果您正在与其他模型(不是用户模型)协作,那么我将为这些协作者创建双精度和存根方法。
也可以慷慨地使用带有控制器测试的工厂。主要是因为控制器是后端生态系统的外层。要对其进行测试,您需要与许多 Rails 和模型的一部分进行集成。我发现这里可以使用工厂。
对于应用程序逻辑——服务、域、策略、普通的旧 ruby 对象——您应该单独测试每个域。对于正在测试的单元或对象,请随意初始化它,但为其合作者创建双精度、模拟和存根。