【问题标题】:Is it good to use database queries in Rspec?在 Rspec 中使用数据库查询好吗?
【发布时间】:2012-07-26 12:10:10
【问题描述】:

我已经开始使用 Rspec 为一个非常古老的项目编写测试。我正在测试的模型都是 ActiveRecords(后端是 Oracle)。 我读过一些博客说我们应该使用模拟和存根/夹具/工厂女孩而不是触发实际的 sql。 我很困惑。我将不得不存根很多方法并创建很多对象。这是一个好习惯吗?

【问题讨论】:

    标签: ruby-on-rails rspec mocking stubbing


    【解决方案1】:

    当您测试模型时,最好让您的测试与数据库集成。也就是说,不要试图模拟 ActiveRecord 的东西,而只需使用模型对象。 FactoryGirl 和 Fabrication 都是构建真实模型对象的便捷捷径,它们是测试 ActiveRecord 模型时的最佳实践。

    由于这是遗留代码,我建议不要在旧代码中过多地模拟或存根,因为只有在单独测试每个组件时,隔离才有效。

    但是,在使用 TDD 编写代码时,模拟和存根有很多好处:

    • 为您提供细粒度的测试(如果方法中断,您的测试会告诉您是哪一个)
    • 您的测试运行得更快,因此您的 TDD 周期更短
    • 让您可以断言您的代码如何与其他对象交互
    • 如果您必须过度存根和模拟其他模型以隔离一个模型,这通常是一个好兆头,表明您的代码耦合度太高,值得重构

    【讨论】:

    • 这正是我想要的,感谢您的建议!
    【解决方案2】:

    通常你会使用存根,然后你可以在不加载 AR 的情况下运行测试,它们会运行得更快。

    我个人认为,测试假数据不是测试……也许在做 TDD 的开发环境中……也许……,但对于测试环境,它应该尽可能接近真实的东西。

    这当然是我的观点,可能不是当前的思想流派。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 2013-06-23
      • 1970-01-01
      • 2021-07-11
      • 2020-09-10
      相关资源
      最近更新 更多