The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber

简介:

TDD(Test-Driven Development)测试驱动开发。
在编写代码之前先编写一个测试,这时候测试是失败的,red,因为还没有写对应的实现代码。然后开始编写实现的代码,然后跑刚才写的测试,直到测试通过,green。
然后我们就重构我们的代码,refactor,然后再次跑我们的测试,green重构成功,red重构失败。失败也没有关系,继续重构。而且有了测试的保证,我们可以很放心的重构。

TDD偏激的做法是,在没有编写测试之前,绝不写一行代码。软件开发,测试先行。用测试来驱动开发。

BDD(Behavior-Driven Development)行为驱动开发。
在应用级别,项目的利害关系人通常不关心数据被持久化到什么地方,什么格式,什么存储类型。当然不是说他们不关心数据,而是说他们更关心他们保存的数据,在他们需要的时候可以获取出来。

软件开发团队面临的主要问题就是沟通问题。BDD旨在通过简单的描述性语言来帮助解决沟通问题,软件就是:给出一个上下文环境,发生事件,然后得到预期的输出。

Given,When,Then是BDD的三个元素。

RSpec
RSpec是一个BDD框架。

Cucumer
BDD that talks to domain experts first and code second
更多的信息可以查看http://cukes.info/。


安装

 

 
  1. gem install rspec 
  2.  
  3. gem install cucumber 


 

创建一个文件。
 

 
  1. vi greeter_spec.rb 


写入下面的内容那个。
 

 
  1. describe "RSpec Greeter" do 
  2.   it "should say 'hello, rspec!' when ti receive the greet() message" do 
  3.     greeter=RSpecGreeter.new 
  4.     greeting=greeter.greet 
  5.     greeting.should == "hello, rspec!" 
  6.   end 
  7. end 




describe代表一组测试。
it代表一个测试。
我们首先初始化一个greeter,然后调用greet方法,然后看看预期的结果是否等于"hello, rspec!"。
运行下面的命令看看结果。

 

 
  1. rspec greeter_spec.rb 



结果是
uninitialized constant RSpecGreeter

RSpec告诉我们还没有定义RSpecGreeter类。就让我们在同一个文件中定义一个RSpecGreeter类。

 

 
  1. class RSpecGreeter 
  2.   def greet 
  3.     "hello, rspec!" 
  4.   end 
  5. end 



然后再次执行rspec greeter_spec.rb,这次看到了。

 

 
  1. Finished in 0.00059 seconds 
  2. 1 example, 0 failures 



这下成功了,这个有点像我们学习编程语言的时候写的helloworld。


在项目下创建两个目录

 

 
  1. mkdir spec features 


将刚才创建的greeter_spec.rb文件移动到spec文件夹

 

 
  1. mv greeter_spec.rb spec/ 



在features文件夹中创建greeter_says_hello.feature文件

 

 
  1. vi features/greeter_says_hello.feature 



敲入下面的内容

 

 
  1. Feature: greeter says hello 
  2.  
  3.   In order to start learning RSpec and Cucumber 
  4.   As a reader of The RSpec Book 
  5.   I want a greeter to say Hello 
  6.  
  7.   Scenario: greeter says hello 
  8.     Given a greeter 
  9.     When I send it the greet message 
  10.     Then I should see "hello, cucumber!" 



保存之后,回到项目根目录。

执行

 

 
  1. cucumber features 



可以看到下面的内容
 

 
  1. Feature: greeter says hello 
  2.   
  3.   In order to start learning RSpec and Cucumber 
  4.   As a reader of The RSpec Book 
  5.   I want a greeter to say Hello 
  6.  
  7.   Scenario: greeter says hello           # features/greeter_says_hello.feature:7 
  8.     Given a greeter                      # features/greeter_says_hello.feature:8 
  9.     When I send it the greet message     # features/greeter_says_hello.feature:9 
  10.     Then I should see "Hello Cucumber!" # features/greeter_says_hello.feature:10 
  11.  
  12. 1 scenario (1 undefined) 
  13. 3 steps (3 undefined) 
  14. 0m0.003s 
  15.  
  16. You can implement step definitions for undefined steps with these snippets: 
  17.  
  18. Given /^a greeter$/ do 
  19.   pending # express the regexp above with the code you wish you had 
  20. end 
  21.  
  22. When /^I send it the greet message$/ do 
  23.   pending # express the regexp above with the code you wish you had 
  24. end 
  25.  
  26. Then /^I should see "(.*?)"$/ do |arg1| 
  27.   pending # express the regexp above with the code you wish you had 
  28. end 


创建文件夹
 

 
  1. mkdir -p features/step_definitions/ 

新建一个文件
 

 
  1. vi features/step_definitions/greeter_steps.rb 





在文件中输入
 

 
  1. Given /^a greeter$/ do 
  2.   @greeter = CucumberGreeter.new 
  3. end 
  4.  
  5. When /^I send it the greet message$/ do 
  6.   @message = @greeter.greet 
  7. end 
  8.  
  9. Then /^I should see "(.*?)"$/ do |greeting| 
  10.   @message.should == greeting 
  11. end 




保存退出。

再次执行
 

 
  1. cucumber features 



这次看到了我们熟悉一些的信息,一些红色的信息。

uninitialized constant CucumberGreeter (NameError)

好像和之前的是一类的,提示我们没有创建CucumbeGreeter类。好吧,在同一个文件features/step_definitions/greeter_steps.rb中,我们创建它。

 

 
  1. class CucumberGreeter 
  2.   def greet 
  3.     "Hello Cucumber!" 
  4.   end 
  5. end 



再次执行。

 

 
  1. cucumbe features 



这下好了,看到了绿色的东西。

好吧,今天就先到这里,让我们对TDD,BDD,RSpec,Cucumber有了一个初步的认识。

 


教程参考:The RSpec Book




本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1060201,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
监控 前端开发 JavaScript
如何测试前端代码? 知道 BDD, TDD, Unit Test 么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?
如何测试前端代码? 知道 BDD, TDD, Unit Test 么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?
74 0
|
测试技术 持续交付 数据库

热门文章

最新文章