【发布时间】:2008-09-26 22:48:34
【问题描述】:
我正在测试一个 Ruby Rails 网站,并想开始进行单元和功能测试。
【问题讨论】:
标签: ruby-on-rails ruby unit-testing
我正在测试一个 Ruby Rails 网站,并想开始进行单元和功能测试。
【问题讨论】:
标签: ruby-on-rails ruby unit-testing
Cucumber 和 RSpec 值得一看。他们鼓励以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!"
【讨论】:
我的建议是(认真地)绕过内置的 rails 单元/功能测试的东西,直接去RSpec。
内置的 rails 东西使用 ruby 附带的 Test::Unit 框架,它或多或少是 JUnit/NUnit/AnyOtherUnit 的直接端口。
我发现这些框架都相当乏味和烦人,导致对编写单元测试普遍冷漠,这显然不是你在这里想要达到的目标。
RSpec 是一种不同的野兽,它专注于描述您的代码应该做什么,而不是断言它已经在做什么。它将改变您看待测试的方式,并且您将获得更多乐趣。
如果我听起来有点像个狂热分子,那只是因为我真的相信 RSpec 就是那么好。我从对单元/功能测试感到恼火和厌倦,变成了它的坚定信徒,这几乎完全是因为 rspec。
【讨论】:
听起来您已经编写了应用程序,所以我不确定您是否会从使用RSpec 而不是Test::Unit 获得丰厚的奖励。
无论如何,无论您选择哪一个,您都会很快遇到另一个问题:管理夹具和模拟(即您的测试“数据”)。所以看看Shoulda和Factory Girl。
【讨论】:
您还可以使用 Firefox 插件(例如 http://selenium.openqa.org/)测试 Web 界面
它会记录点击和文本输入,然后播放并检查页面是否有正确的显示元素。
【讨论】:
即使应用程序已经编写完成,我还是建议使用 RSpec 而不是 Test::Unit,因为没有应用程序完成。您将要添加功能和重构代码。尽早养成正确的测试习惯将有助于减轻这些改变的痛苦
【讨论】: