何时编写模拟对象与工厂 (FactoryGirl)

When to write a mock object vs a Factory (FactoryGirl)

我有一个非常大的 Rails 代码库,我们使用了很多工厂 (FactoryGirl)。问题是,工厂女孩的一个实例创建了一个数据库事务,所以当我们 运行 整个测试套件时,它需要很长时间。但是,如果我们正确使用 Rspec 模拟,那么测试将 运行 快如闪电,因为模拟非常轻巧——不需要数据库事务。

我的问题:什么时候模拟角色、实体或对象,什么时候使用对象的有效实例?如果有人可以提供一个例子,那就太好了。

我学会了分解何时在测试中使用 FactoryGirl 或活动记录实例。它们应该用于您的模型测试和控制器测试。

模型测试 -- 必须与数据库集成。如果您正在创建与用户实例交互的用户测试,那么您将需要用户工厂。但是,如果您正在与其他模型(不是 User 模型)协作,那么我会为这些协作者创建双打和存根方法。

一个人也可以慷慨地使用带有控制器测试的工厂。主要是因为控制器是后端生态系统的外层。要对其进行测试,您需要与许多 Rails 和部分模型集成。我发现在这里使用工厂是可以的。

对于应用程序逻辑——服务、域、策略、普通旧 ruby 对象——您应该单独测试每个域。对于被测单元或对象,可以随意对其进行初始化,但为其协作者创建双打、模拟和存根。