加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 19:59:54 所属栏目:百科 来源:网络整理
导读:TDD(Test-Driven Development)测试驱动开发。 在编写代码之前先编写一个测试,这时候测试是失败的,red,因为还没有写对应的实现代码。然后开始编写实现的代码,然后跑刚才写的测试,直到测试通过,green。 然后我们就重构我们的代码,refactor,然后再次



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. geminstallrspec
  2. geminstallcucumber


创建一个文件。

 
 
  1. vigreeter_spec.rb


写入下面的内容那个。

 
 
  1. describe"RSpecGreeter"do
  2. it"shouldsay'hello,rspec!'whentireceivethegreet()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. rspecgreeter_spec.rb



结果是
uninitialized constant RSpecGreeter

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

 
 
  1. classRSpecGreeter
  2. defgreet
  3. "hello,rspec!"
  4. end
  5. end



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

 
 
  1. Finishedin0.00059seconds
  2. 1example,0failures



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


在项目下创建两个目录

 
 
  1. mkdirspecfeatures


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

 
 
  1. mvgreeter_spec.rbspec/



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

 
 
  1. vifeatures/greeter_says_hello.feature



敲入下面的内容

 
 
  1. Feature:greetersayshello
  2. InordertostartlearningRSpecandCucumber
  3. AsareaderofTheRSpecBook
  4. IwantagreetertosayHello
  5. Scenario:greetersayshello
  6. Givenagreeter
  7. WhenIsenditthegreetmessage
  8. ThenIshouldsee"hello,cucumber!"



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

执行

 
 
  1. cucumberfeatures



可以看到下面的内容

 
 
  1. Feature:greetersayshello
  2. InordertostartlearningRSpecandCucumber
  3. AsareaderofTheRSpecBook
  4. IwantagreetertosayHello
  5. Scenario:greetersayshello#features/greeter_says_hello.feature:7
  6. Givenagreeter#features/greeter_says_hello.feature:8
  7. WhenIsenditthegreetmessage#features/greeter_says_hello.feature:9
  8. ThenIshouldsee"HelloCucumber!"#features/greeter_says_hello.feature:10
  9. 1scenario(1undefined)
  10. 3steps(3undefined)
  11. 0m0.003s
  12. Youcanimplementstepdefinitionsforundefinedstepswiththesesnippets:
  13. Given/^agreeter$/do
  14. pending#expresstheregexpabovewiththecodeyouwishyouhad
  15. end
  16. When/^Isenditthegreetmessage$/do
  17. pending#expresstheregexpabovewiththecodeyouwishyouhad
  18. end
  19. Then/^Ishouldsee"(.*?)"$/do|arg1|
  20. pending#expresstheregexpabovewiththecodeyouwishyouhad
  21. end


创建文件夹

 
 
  1. mkdir-pfeatures/step_definitions/

新建一个文件

 
 
  1. vifeatures/step_definitions/greeter_steps.rb





在文件中输入

 
 
  1. Given/^agreeter$/do
  2. @greeter=CucumberGreeter.new
  3. end
  4. When/^Isenditthegreetmessage$/do
  5. @message=@greeter.greet
  6. end
  7. Then/^Ishouldsee"(.*?)"$/do|greeting|
  8. @message.should==greeting
  9. end




保存退出。

再次执行

 
 
  1. cucumberfeatures



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

uninitialized constant CucumberGreeter (NameError)

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

 
 
  1. classCucumberGreeter
  2. defgreet
  3. "HelloCucumber!"
  4. end
  5. end



再次执行。

 
 
  1. cucumbefeatures



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

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


教程参考:The RSpec Book


所有的代码放在
https://github.com/woaigithub/the-rspec-book-with-cucumber

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读