Ruby on rails 在Rspec中使用数据库查询好吗?

Ruby on rails 在Rspec中使用数据库查询好吗?,ruby-on-rails,rspec,mocking,stubbing,Ruby On Rails,Rspec,Mocking,Stubbing,我已经开始为一个非常古老的项目使用Rspec编写测试。我正在测试的模型都是ActiveRecords(后端是Oracle)。 我读过一些博客,说我们应该使用mock和stubing/fixtures/factorygirl来触发实际的sql。 我很困惑。我将不得不存根很多方法和创建很多对象。这是一个好的实践吗?通常您会使用存根,然后您可以在不加载AR的情况下运行测试,并且它们会运行得更快 我个人认为测试假数据不是测试。。。也许在开发环境中做TDD。。。也许…,但对于测试环境来说,它应该尽可能接近

我已经开始为一个非常古老的项目使用Rspec编写测试。我正在测试的模型都是ActiveRecords(后端是Oracle)。 我读过一些博客,说我们应该使用mock和stubing/fixtures/factorygirl来触发实际的sql。
我很困惑。我将不得不存根很多方法和创建很多对象。这是一个好的实践吗?

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

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


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

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

由于这是遗留代码,我建议不要在旧代码中进行太多的模拟或存根,因为只有在隔离测试每个组件时,隔离才起作用

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

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

这正是我想要的,谢谢你的建议!