【问题标题】:Should I mock my model in rails controller tests?我应该在 Rails 控制器测试中模拟我的模型吗?
【发布时间】:2009-11-27 13:32:25
【问题描述】:

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

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

谢谢。

更新:

在对此有很多相互矛盾的意见之后,似乎归结为您认同哪种哲学。

Rspec 社区似乎采用大量存根依赖项来实现被测对象的隔离。验收测试(传统上称为集成测试;)用于确保您的对象与它们的运行时依赖项一起工作。

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

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

【问题讨论】:

    标签: ruby-on-rails rspec bdd shoulda


    【解决方案1】:

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

    【讨论】:

    • 如何解决覆盖不足的问题?我知道我可以通过集成测试来做到这一点,但我觉得我的单元测试也应该能发现这些问题。
    【解决方案2】:

    如果您使用的是 Mocha,则应该执行以下操作。

    Mocha::Configuration.prevent(:stubbing_non_existent_method)
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-04-29
        • 1970-01-01
        • 2022-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        相关资源
        最近更新 更多