我们应该在 Rails Factory 中使用 Faker 吗?

2024-01-09

I love Faker https://github.com/stympy/faker,我在我的seeds.rb一直用真实的数据填充我的开发环境。

我也刚刚开始使用工厂女工 https://github.com/thoughtbot/factory_girl_rails这也节省了大量时间——但是当我在网上寻找代码示例时,我没有看到太多人们将两者结合起来的证据。

问:人们不在工厂中使用 faker 有充分的理由吗?

我的感觉是,通过这样做,我可以通过每次播种随机但可预测的数据来提高测试的稳健性,这有望增加出现错误的机会。

但也许这是不正确的,与对工厂进行硬编码相比没有任何好处,或者我没有看到潜在的陷阱。这两种宝石应该或不应该结合在一起有充分的理由吗?


有些人反对它,因为here http://arjanvandergaag.nl/blog/factory_girl_tips.html.

不要使用随机属性值

一种常见的模式是使用假数据库(如 Faker 或 Forgery)来生成随机值 苍蝇。这对于姓名、电子邮件地址或 电话号码,但它没有任何实际用途。创造独特 值对于序列来说非常简单:

FactoryGirl.define do   
  sequence(:title) { |n| "Example title #{n}" }

  factory :post do
    title
  end 
end

FactoryGirl.create(:post).title # => 'Example title 1' 

您的随机化 数据可能在某个阶段触发测试中的意外结果, 让您的工厂难以合作。任何可能的值 以某种方式影响你的测试结果必须被覆盖, 意义:

随着时间的推移,您会发​​现新的属性,使您的测试 有时会失败。这是一个令人沮丧的过程,因为测试可能会失败 每十次或每百次运行仅一次 - 取决于运行次数 有哪些属性和可能的​​值,以及哪种组合 触发该错误。您必须列出每个此类随机属性 每个测试都覆盖它,这是愚蠢的。所以,你创建非随机的 工厂,从而否定了原始随机性的任何好处。 有人可能会争辩说,就像 Henrik Nyh 那样,随机值可以帮助你 发现错误。虽然有可能,但这显然意味着你有更大的 问题:你的测试套件中存在漏洞。在最坏的情况下,该错误 仍然未被发现;在最好的情况下,你会得到一个神秘的 错误消息在您下次运行测试时消失,使得 很难调试。确实,一个隐秘的错误比没有错误要好,但是 随机工厂仍然不能替代适当的单元测试, 代码审查和 TDD 可以防止这些问题。

因此,随机工厂不仅不值得付出努力,而且 甚至让你对自己的测试产生错误的信心,这比 根本没有测试。

但只要你愿意,没有什么可以阻止你去做,就去做吧。

哦,在最近的 FactoryGirl 中有一种更简单的方法来内联序列,该引用是为旧版本编写的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们应该在 Rails Factory 中使用 Faker 吗? 的相关文章

随机推荐

  • 其中(向量 1 < 向量 2)

    让我们先举一个在 R 中计算的小例子 x lt c 1 3 1 4 2 max which x lt 2 1 3 现在 我不仅想对一个值 2 执行此操作 而且还想同时对多个值执行此操作 它应该给我类似的东西 max which x
  • 我可以将泛型属性存储到对象的字段中吗

    假设有以下类存根 public class Foo
  • 无法访问 /dev/mem。尝试在 Raspberry Pi 上以 root 身份运行

    我是一个树莓派菜鸟 我已经完成所有设置 我正在尝试使用浏览器通过浏览器运行文件shell exec 这是 python 文件的内容 usr bin python import time import RPi GPIO as GPIO PIN
  • 测试 Spring MVC 控制器的 @MessageMapping WebSocket 方法

    我目前正在试验 Spring 4 0 中添加的对 WebSockets 的支持 如中所述本指南 http spring io guides gs messaging stomp websocket 如指南中所示 用注释的方法 Message
  • 需要想法。 Javascript+XPCOM+C++ 插件

    因此 Firefox 中有一个 WebRTC 并且有一个方便的类可以实现 RTC 通信 称为 RTCPeerConnection 可以从 JavaScript 应用程序实例化和使用它 你可以在上面找到一些不错的例子 1 https appr
  • 在命令行上运行 yii 控制器/操作

    是否可以像使用 CodeIgniter 一样在 linux 命令行上运行 yii 控制器 动作 CI风格 php index php 控制器操作 class NotifyUnsharedItemsCommand extends CConso
  • 如何在 Inno Setup 中检查 64/32 位

    我想进入一个文件夹 这将是Program Files x86 如果是 64 位Program Files如果是 32 位 如何在 Inno 设置中做到这一点 这是我尝试过的代码 但没有运气 procedure CurUninstallSte
  • 修改Python中的符号链接

    如何在 Python 中更改符号链接以从一个文件指向另一个文件 The os symlink https docs python org 3 library os html os symlink函数似乎只能用于创建新的符号链接 如果您需要原
  • Android启动画面一开始是白色的?

    当我启动我的应用程序时 在出现闪屏之前我会看到白屏几秒钟 我想知道我的应用程序的大小是否会影响它 它是 17 7MB 或者是因为我的测试设备很旧 HTC Desire HD 并且数据太多而有点损坏 或者这是正常行为 或者也许问题出在我的代码
  • 更改 networkx 多重图中的边属性

    在多重图中 每次调用 add edge a b weight 1 都会在节点之间添加一条新边a and b 构建图表时 是否可以修改此权重a and b又被发现了 现在我检查 a b 或 b a 是否连接 然后必须delete边缘 以及ad
  • Java 中 % 运算符和 IEEEremainder() 方法之间的区别(如果有的话)?

    在 Java 中 使用 运算符获取整数除法 x y 的余数与 Math IEEEremainder x y 方法之间是否存在功能或性能差异 除了 John B 已经指出的类型差异之外 语义上也存在显着差异 Math IEEEremainde
  • 当应用程序在后台运行时,如何对 Core Data iCloud 同步通知采取行动?

    我有一个 iOS 应用程序 它使用 Core Data 和 iCloud 同步 该应用程序运行完美 并且可以跨多个设备同步 作为我的实现的一部分 我的应用程序注册为 NSPersistentStoreCoordinatorStoresDid
  • 如何在 iOS 上读取、修改和写入 PDF (CGPDFDocument)?

    我正在尝试修改 iOS 上现有 PDF 的 PDF 元数据 标题 作者等 虽然很容易找到用于 PDF 解析和从头开始创建 PDF 的示例代码 但似乎没有一种简单的方法可以将现有 PDF 转储到新文件中 并稍微修改它 更具体地说 如何获取阅读
  • 最长最大重复子串

    子串的长度可以是 1 2 3 我试图解决的问题涉及找到出现次数最多的子字符串 所以它基本上分解为寻找具有最大频率的字符 然而 我发现我可以使用后缀树在 O n 中找到最长的重复子串 但是 后缀树返回子字符串 并优先考虑长度 我想找到出现次数
  • 如何在文件顶部添加新的文本行?

    我正在开发一个简单的程序 使Python脚本可执行 并且我正在添加解释器路径的部分 usr bin python 我尝试这样做 但它没有添加新行 而是替换了当前的行and删除下一行的一部分 我做错了什么 我将源代码上传到Ubuntu Pas
  • Swift - 压缩视频文件

    所以 目前我正在使用它来压缩视频 func compressVideo inputURL NSURL outputURL NSURL handler session AVAssetExportSession gt Void let urlA
  • 使用 min/max 时的任何差异都发生在序列而不是元素级别

    我的意思是是否存在以下情况
  • 如何从另一个项目导入.java并在android中导入包

    我们正在大学里开展一个项目 项目 A 该项目必须从多年前制定的另一个项目 项目 B 的课程中扩展出来 这是在 Eclipse 下工作 并为 android 开发应用程序 所以这实际上是我们正在讨论的活动 到目前为止我已经尝试过这个 将项目
  • 嵌套 CSS 样式?

    这样的事情可能吗 imgbox hover ui resizable se some style 或者概念上的等价物 基本上 只有当某个类的元素悬停在上面时 才会出现某个元素within该类应该改变一些风格 你可以这样做 imgbox ho
  • 我们应该在 Rails Factory 中使用 Faker 吗?

    I love Faker https github com stympy faker 我在我的seeds rb一直用真实的数据填充我的开发环境 我也刚刚开始使用工厂女工 https github com thoughtbot factory