RSpec和Cucumber有什么区别?

ban*_*ing 112 testing tdd rspec ruby-on-rails cucumber

我有6个月的Rails开发经验.我已经构建了一个现在正在使用的Web应用程序,它具有身份验证和授权以及postgresql db.

我正在继续我的第二个Rails应用程序,但这一次,经过经验教训,我想用TDD开发它,因为我注意到它更容易扩展它并修复bug.它发展缓慢,但从长远来看,它更容易处理.

我听说过Rspec和Cucumber,但他们完全被他们搞糊涂了.

我想知道RSpec和Cucumber之间的区别以及它们的用途.

从初学者(也是唯一的开发者)的角度来看,是否确实需要测试框架也是有用的.

DVG*_*DVG 318

RSpec和Cucumber都是测试框架.RSpec包括传统的单元测试(这意味着测试一个类或部分应用程序与应用程序的其余部分隔离.因此,您的模型执行您的模型应该执行的操作,控制器执行它应该执行的操作等).

RSpec和Cucumber都用于验收测试(根据您的要求,称为ATDD,BDD,实例规范等).这些是业务案例驱动的集成测试,这意味着它们模拟用户使用应用程序的方式并使用完整的Rails堆栈,因此可以找到应用程序的不同部分协同工作方式的问题,而单元测试不会找.

RSpec和Cucumber之间的主要区别在于业务可读性因素.Cucumber的主要内容是规范(功能)与测试代码分开,因此您的产品所有者可以提供或查看规范,而无需深入挖掘代码.这些是您在Cucumber中创建的.feature文件.RSpec有一个类似的机制,但是你描述了一个包含业务规范的Describe,Context或It块的步骤,然后立即拥有执行该语句的代码.对于开发人员而言,这种方法更容易使用,但对于非技术人员来说则更难一点.

哪个用?如果您是唯一的开发人员和产品所有者,那么我会坚持使用RSpec,我觉得技术人员更容易理解,在保持范围和控制方面提供一些优势,并让您免于使用RegEx进行测试脚步.如果您正在为客户构建此项目,并且他们亲自参与规范,请使用Cucumber进行验收测试并使用RSpec进行单元测试.

只是为了证明两者之间的主要区别:

黄瓜:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end
Run Code Online (Sandbox Code Playgroud)

Rspec的

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end
Run Code Online (Sandbox Code Playgroud)

这个博客系列非常适合使用RSpec:http://everydayrails.com/2012/03/12/testing-series-intro.html

  • 这是一个很好的答案.非常感谢您的时间和建议.我读过很多关于铁轨的书籍,但到目前为止还没有找到能够做出这些区分的书籍,并解释了哪些书籍.再次感谢 (24认同)
  • 这确实是stackoverflow上最全面和易于理解的答案之一(完整的一个很好的例子!) (3认同)
  • 我不能向有需要的人推荐这个答案.谢谢你的详细信息! (2认同)