在Rspec中使用数据库查询是否合适?

Rim*_*ima 3 rspec ruby-on-rails mocking stubbing

我已经开始使用Rspec为一个非常古老的项目编写测试.我正在测试的模型都是ActiveRecords(后端是Oracle).我读过一些博客说我们应该使用模拟和存根/固定装置/工厂女孩来解雇实际的sql.我很迷惑.我将不得不存储很多方法并创建大量对象.这是一个好习惯吗?

cjh*_*eal 7

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

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

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

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