【问题标题】:Why should I use RSpec or shoulda with Rails?为什么我应该在 Rails 中使用 RSpec 或 shoulda?
【发布时间】:2008-09-21 01:47:01
【问题描述】:

我正在设置一个 Rails 应用程序,我刚刚完成了一些单元测试,我的朋友说,显然固定装置不再酷,人们现在正在使用 RSpec 或 shoulda。我想知道使用这些其他工具包的实际好处是什么。任何信息都表示赞赏。

-fREW

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing testing shoulda


    【解决方案1】:

    我个人更喜欢 Shoulda 而不是 RSpec。我发现应该比 RSpec 有更少的魔法语法。我对 RSpec 的问题是,是的,当我大声朗读它时它非常易读,但是当我开始编写它时,嗯,我永远不确定应该如何编写给定的断言。 Prag Dave explains the problem better than me。他也likes Shoulda 并举了几个例子。

    【讨论】:

    • 我完全同意 webmat。我真的很难理解 RSpec 语法,因为它有很多语法糖。它将普通的短语变成了代码,但你已经弄清楚它应该做什么!曲线很陡,我很懒。
    • 我以前也对含糖的语法有点怀疑,但是在阅读rdoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers 之后,我实际上用 RSpec 的语法编写断言没有任何问题。 (也许自您回答以来,文档在 2.5 年内变得更好。^^)事实上,我现在比 Test::Unit 的断言更喜欢 RSpec 的期望(而且这仍然完全不关心“英语可读性”(错误-)功能)。
    【解决方案2】:

    RSpec 和类似框架是旨在帮助行为驱动开发的工具。它们不仅是编写测试的更漂亮的方式,尽管它们确实对此有所帮助。

    这里有很多关于 BDD 的信息:http://behaviour-driven.org/ 和维基百科:http://en.wikipedia.org/wiki/Behavior_Driven_Development

    这里列出的好处太多了,所以我建议稍微浏览一下那个网站。

    【讨论】:

      【解决方案3】:

      这里有两个不同的东西:

      第一件事是使用什么框架来编写测试/规范。在这里,您可以在 Test::Unit、RSpec、Shouda 等之间进行选择。选择是您是否想要执行传统的 TDD(Test::Unit),或者您是否更喜欢 David Chemlinsky(RSpec 和某种程度上的应该)等开发人员所提倡的指定行为的替代思考方式。

      第二件事是如何处理测试数据。有 Rails 固定装置和替代方案设计有其他目标,例如 the FixtureReplacement plugin。在 Rails 2.0 之前,fixture 存在重大且有据可查的实际问题。 Rails 2.0 中修复了许多实际问题。然而,fixture 可能会导致无意的测试耦合,一些替代方案试图避免这种情况。

      【讨论】:

        【解决方案4】:

        RSpec 更加强大,因为它更容易读取和写入测试。使用模拟和存根时它也非常优雅,一旦你开始在测试中使用它们,这个概念将变得非常有用。在一个简单的测试应用程序(NON RAILS!)中尝试一下,您会发现您的规范与等效的标准测试相比有多优雅。

        【讨论】:

          【解决方案5】:

          查看 Josh Susser 的 The Great Test Framework Dance-off,比较流行的 Ruby 测试框架。

          【讨论】:

            【解决方案6】:

            如果您正在构建一个大型应用程序并且没有一个团队都非常擅长编写可以通过黑盒测试进行良好测试的解耦代码,并且准备好完全接受使用/调试大量模拟和存根,不要走工厂路。

            无论您在哪里阅读有关 Awesome Factories Are 的文章,您都会看到一些关于工厂在大型应用程序中可能不可行的警告,因为它们比固定装置慢一点。

            但是“慢一点”确实慢了几个数量级。

            工厂并不比使用标签作为 id 的夹具容易得多,只要您保持夹具井井有条。在某些情况下,工厂更难调试。

            就在今晚,我将一个工厂转换为固定装置,使用它的测试文件的运行时间从 65 秒变为 15 秒,尽管该测试文件中只有大约 15% 的测试使用该工厂。

            如果您使用 minitest,您可以随机运行测试;这将很快揭示测试之间的任何数据耦合。 (不确定 rspec 是否可以选择随机化测试顺序)

            【讨论】:

              【解决方案7】:

              Test::Unit 适合小型应用程序。但是使用像 Shoulda 或 RSpec 这样的测试框架有很多好处,例如。 G。上下文!!

              我看不到 Shoulda 和 RSpec 存在非此即彼的关系。在进行单断言测试时,我使用 Shoulda 作为 RSpec 的替代品。我真的很喜欢 Shoulda 单线,但是在 RSpec 中编写匹配器要容易得多。所以我的建议是在最适合的地方使用不同的测试工具。

              【讨论】:

                【解决方案8】:

                您可以使用 Cucumber 之类的测试框架,它比 RSpec 还要快..

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-10
                  • 2018-11-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多