【发布时间】:2012-07-26 12:10:10
【问题描述】:
我已经开始使用 Rspec 为一个非常古老的项目编写测试。我正在测试的模型都是 ActiveRecords(后端是 Oracle)。 我读过一些博客说我们应该使用模拟和存根/夹具/工厂女孩而不是触发实际的 sql。 我很困惑。我将不得不存根很多方法并创建很多对象。这是一个好习惯吗?
【问题讨论】:
标签: ruby-on-rails rspec mocking stubbing
我已经开始使用 Rspec 为一个非常古老的项目编写测试。我正在测试的模型都是 ActiveRecords(后端是 Oracle)。 我读过一些博客说我们应该使用模拟和存根/夹具/工厂女孩而不是触发实际的 sql。 我很困惑。我将不得不存根很多方法并创建很多对象。这是一个好习惯吗?
【问题讨论】:
标签: ruby-on-rails rspec mocking stubbing
当您测试模型时,最好让您的测试与数据库集成。也就是说,不要试图模拟 ActiveRecord 的东西,而只需使用模型对象。 FactoryGirl 和 Fabrication 都是构建真实模型对象的便捷捷径,它们是测试 ActiveRecord 模型时的最佳实践。
由于这是遗留代码,我建议不要在旧代码中过多地模拟或存根,因为只有在单独测试每个组件时,隔离才有效。
但是,在使用 TDD 编写代码时,模拟和存根有很多好处:
【讨论】:
通常你会使用存根,然后你可以在不加载 AR 的情况下运行测试,它们会运行得更快。
我个人认为,测试假数据不是测试……也许在做 TDD 的开发环境中……也许……,但对于测试环境,它应该尽可能接近真实的东西。
这当然是我的观点,可能不是当前的思想流派。
【讨论】: