【问题标题】:What is the best way to start Unit and Functional testing of a Ruby Rails website?开始对 Ruby Rails 网站进行单元和功能测试的最佳方式是什么?
【发布时间】:2008-09-26 22:48:34
【问题描述】:

我正在测试一个 Ruby Rails 网站,并想开始进行单元和功能测试。

【问题讨论】:

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


    【解决方案1】:

    CucumberRSpec 值得一看。他们鼓励以behaviour-driven,基于示例的风格进行测试。

    RSpec 是一个用于单元级测试的库:

    describe "hello_world"
      it "should say hello to the world" do
        # RSpec comes with its own mock-object framework built in,
        # though it lets you use others if you prefer
        world = mock("World", :population => 6e9)
        world.should_receive(:hello)
        hello_world(world)
      end
    end
    

    它对 Rails 有特殊的支持(例如,它可以单独测试模型、视图和控制器)并且可以替代 Rails 内置的测试机制。

    Cucumber(以前称为 RSpec Story Runner)让您可以用(相当)简单的英语编写高级验收测试,您可以向客户展示(并同意)客户,然后运行它们:

    Story: Commenting on articles
    
      As a visitor to the blog
      I want to post comments on articles
      So that I can have my 15 minutes of fame
    
      Scenario: Post a new comment
    
        Given I am viewing an article
        When I add a comment "Me too!"
        And I fill in the CAPTCHA correctly
        Then I should see a comment "Me too!"
    

    【讨论】:

    • 用于验收测试的第二个 API 已从 RSpec 中取出,现在称为“黄瓜”。
    【解决方案2】:

    我的建议是(认真地)绕过内置的 rails 单元/功能测试的东西,直接去RSpec

    内置的 rails 东西使用 ruby​​ 附带的 Test::Unit 框架,它或多或少是 JUnit/NUnit/AnyOtherUnit 的直接端口。
    我发现这些框架都相当乏味和烦人,导致对编写单元测试普遍冷漠,这显然不是你在这里想要达到的目标。

    RSpec 是一种不同的野兽,它专注于描述您的代码应该做什么,而不是断言它已经在做什么。它将改变您看待测试的方式,并且您将获得更多乐趣。

    如果我听起来有点像个狂热分子,那只是因为我真的相信 RSpec 就是那么好。我从对单元/功能测试感到恼火和厌倦,变成了它的坚定信徒,这几乎完全是因为 rspec。

    【讨论】:

    • Test::Unit 和 RSpec 只是工具——价值在于你如何使用它们。你可以在 RSpec 中做的任何事情都可以在 Test::Unit 中做。 BDD 是对 TDD 的改进,只是因为它以清晰的语言指出了你在测试中应该做的事情。见dannorth.net/introducing-bdd
    • 这正是我的观点。如果我愿意,我可以用 x86 汇编程序编写所有测试。价值在于它如何影响您的思维,从而帮助您进行更好的测试
    【解决方案3】:

    听起来您已经编写了应用程序,所以我不确定您是否会从使用RSpec 而不是Test::Unit 获得丰厚的奖励。

    无论如何,无论您选择哪一个,您都会很快遇到另一个问题:管理夹具和模拟(即您的测试“数据”)。所以看看ShouldaFactory Girl

    【讨论】:

      【解决方案4】:

      您还可以使用 Firefox 插件(例如 http://selenium.openqa.org/)测试 Web 界面

      它会记录点击和文本输入,然后播放并检查页面是否有正确的显示元素。

      【讨论】:

        【解决方案5】:

        即使应用程序已经编写完成,我还是建议使用 RSpec 而不是 Test::Unit,因为没有应用程序完成。您将要添加功能和重构代码。尽早养成正确的测试习惯将有助于减轻这些改变的痛苦

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-05
          • 2019-02-12
          • 1970-01-01
          • 2010-09-21
          • 2010-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多