3

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

4

2 回答 2

7

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

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

然而,当使用 TDD 编写代码时,模拟和存根有很多好处:

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

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

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

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

于 2012-07-26T12:27:09.223 回答