我应该在rails控制器测试中模拟我的模型吗?

时间:2009-11-27 13:32:25

标签: ruby-on-rails rspec bdd shoulda

我在我的报道中发现漏洞,因为我一直在控制器示例中嘲笑我的模型。当我删除控制器所依赖的模型方法时,我不会失败。

来自TDD的静态类型语言,我总是会模拟对测试中的对象的依赖关系,以便提高速度。在上面的例子中我仍然会失败,因为我的模拟子类化了原始对象。我正在寻找动态语言的最佳实践。

感谢。

更新

在得到很多相互矛盾的意见之后,似乎归结为你所采用的哲学。

  

Rspec社区似乎拥有大量存根依赖关系来实现被测对象的隔离。验收测试(传统上称为集成测试;)用于确保您的对象使用其运行时依赖性。

     

shoulda / Test :: Unit社区似乎尽可能远离存根。这允许您的测试确认您的测试对象实际上与其依赖项一起使用。

此视频很好地总结了这一点:http://vimeo.com/3296561

3 个答案:

答案 0 :(得分:2)

是的,在您的控制器示例中,模拟您的模型。在模型示例中,测试模型。

答案 1 :(得分:2)

如果您正在使用Mocha,则应执行以下操作。

Mocha::Configuration.prevent(:stubbing_non_existent_method)

答案 2 :(得分:0)

在编写单元测试时,整个目标应该只测试单元。将模型视为一个单元并单独覆盖它。模型的变化不应直接影响控制器的单元测试覆盖率。