日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



TDD(Test-Driven Development)測試驅動開發(fā)。
在編寫代碼之前先編寫一個測試,這時候測試是失敗的,red,因為還沒有寫對應的實現(xiàn)代碼。然后開始編寫實現(xiàn)的代碼,然后跑剛才寫的測試,直到測試通過,green。
然后我們就重構我們的代碼,refactor,然后再次跑我們的測試,green重構成功,red重構失敗。失敗也沒有關系,繼續(xù)重構。而且有了測試的保證,我們可以很放心的重構。

TDD偏激的做法是,在沒有編寫測試之前,絕不寫一行代碼。軟件開發(fā),測試先行。用測試來驅動開發(fā)。

BDD(Behavior-Driven Development)行為驅動開發(fā)。
在應用級別,項目的利害關系人通常不關心數(shù)據(jù)被持久化到什么地方,什么格式,什么存儲類型。當然不是說他們不關心數(shù)據(jù),而是說他們更關心他們保存的數(shù)據(jù),在他們需要的時候可以獲取出來。

軟件開發(fā)團隊面臨的主要問題就是溝通問題。BDD旨在通過簡單的描述性語言來幫助解決溝通問題,軟件就是:給出一個上下文環(huán)境,發(fā)生事件,然后得到預期的輸出。

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

RSpec
RSpec是一個BDD框架。

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


安裝

?

  • gem?install?rspec?
  • ?
  • gem?install?cucumber?

  • ?

    創(chuàng)建一個文件。
    ?

  • vi?greeter_spec.rb?

  • 寫入下面的內(nèi)容那個。
    ?

  • describe?"RSpec?Greeter"?do?
  • ??it?"should?say?'hello,?rspec!'?when?ti?receive?the?greet()?message"?do?
  • ????greeter=RSpecGreeter.new?
  • ????greeting=greeter.greet?
  • ????greeting.should?==?"hello,?rspec!"?
  • ??end?
  • end?



  • describe代表一組測試。
    it代表一個測試。
    我們首先初始化一個greeter,然后調(diào)用greet方法,然后看看預期的結果是否等于"hello, rspec!"。
    運行下面的命令看看結果。

    ?

  • rspec?greeter_spec.rb?


  • 結果是
    uninitialized constant RSpecGreeter

    RSpec告訴我們還沒有定義RSpecGreeter類。就讓我們在同一個文件中定義一個RSpecGreeter類。

    ?

  • class?RSpecGreeter?
  • ??def?greet?
  • ????"hello,?rspec!"?
  • ??end?
  • end?


  • 然后再次執(zhí)行rspec greeter_spec.rb,這次看到了。

    ?

  • Finished?in?0.00059?seconds?
  • 1?example,?0?failures?


  • 這下成功了,這個有點像我們學習編程語言的時候寫的helloworld。


    在項目下創(chuàng)建兩個目錄

    ?

  • mkdir?spec?features?

  • 將剛才創(chuàng)建的greeter_spec.rb文件移動到spec文件夾

    ?

  • mv?greeter_spec.rb?spec/?


  • 在features文件夾中創(chuàng)建greeter_says_hello.feature文件

    ?

  • vi?features/greeter_says_hello.feature?


  • 敲入下面的內(nèi)容

    ?

  • Feature:?greeter?says?hello?
  • ?
  • ??In?order?to?start?learning?RSpec?and?Cucumber?
  • ??As?a?reader?of?The?RSpec?Book?
  • ??I?want?a?greeter?to?say?Hello?
  • ?
  • ??Scenario:?greeter?says?hello?
  • ????Given?a?greeter?
  • ????When?I?send?it?the?greet?message?
  • ????Then?I?should?see?"hello,?cucumber!"?


  • 保存之后,回到項目根目錄。

    執(zhí)行

    ?

  • cucumber?features?


  • 可以看到下面的內(nèi)容
    ?

  • Feature:?greeter?says?hello?
  • ??
  • ??In?order?to?start?learning?RSpec?and?Cucumber?
  • ??As?a?reader?of?The?RSpec?Book?
  • ??I?want?a?greeter?to?say?Hello?
  • ?
  • ??Scenario:?greeter?says?hello???????????#?features/greeter_says_hello.feature:7?
  • ????Given?a?greeter??????????????????????#?features/greeter_says_hello.feature:8?
  • ????When?I?send?it?the?greet?message?????#?features/greeter_says_hello.feature:9?
  • ????Then?I?should?see?"Hello?Cucumber!"?#?features/greeter_says_hello.feature:10?
  • ?
  • 1?scenario?(1?undefined)?
  • 3?steps?(3?undefined)?
  • 0m0.003s?
  • ?
  • You?can?implement?step?definitions?for?undefined?steps?with?these?snippets:?
  • ?
  • Given?/^a?greeter$/?do?
  • ??pending?#?express?the?regexp?above?with?the?code?you?wish?you?had?
  • end?
  • ?
  • When?/^I?send?it?the?greet?message$/?do?
  • ??pending?#?express?the?regexp?above?with?the?code?you?wish?you?had?
  • end?
  • ?
  • Then?/^I?should?see?"(.*?)"$/?do?|arg1|?
  • ??pending?#?express?the?regexp?above?with?the?code?you?wish?you?had?
  • end?

  • 創(chuàng)建文件夾
    ?

  • mkdir?-p?features/step_definitions/?
  • 新建一個文件
    ?

  • vi?features/step_definitions/greeter_steps.rb?




  • 在文件中輸入
    ?

  • Given?/^a?greeter$/?do?
  • ??@greeter?=?CucumberGreeter.new?
  • end?
  • ?
  • When?/^I?send?it?the?greet?message$/?do?
  • ??@message?=?@greeter.greet?
  • end?
  • ?
  • Then?/^I?should?see?"(.*?)"$/?do?|greeting|?
  • ??@message.should?==?greeting?
  • end?



  • 保存退出。

    再次執(zhí)行
    ?

  • cucumber?features?


  • 這次看到了我們熟悉一些的信息,一些紅色的信息。

    uninitialized constant CucumberGreeter (NameError)

    好像和之前的是一類的,提示我們沒有創(chuàng)建CucumbeGreeter類。好吧,在同一個文件features/step_definitions/greeter_steps.rb中,我們創(chuàng)建它。

    ?

  • class?CucumberGreeter?
  • ??def?greet?
  • ????"Hello?Cucumber!"?
  • ??end?
  • end?


  • 再次執(zhí)行。

    ?

  • cucumbe?features?


  • 這下好了,看到了綠色的東西。

    好吧,今天就先到這里,讓我們對TDD,BDD,RSpec,Cucumber有了一個初步的認識。

    ?


    教程參考:The RSpec Book


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

    轉載于:https://blog.51cto.com/virusswb/1060201

    《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。