BDD for Ruby

2,144 views

Published on

The slides in Ruby Tuesday 3/10 Taiwan.

Published in: Technology

BDD for Ruby

  1. 1. Behavior Driven Development for Ruby Lu Wei Jen
  2. 2. TDD vs. BDD
  3. 3. TDD <ul><li>Test Driven Development </li></ul><ul><li>Writing tests before writing the code being tested. </li></ul><ul><li>Red/Green/Refactor </li></ul>
  4. 5. TDD 缺點 <ul><li>怎麼開始? </li></ul><ul><li>為測試而測試 </li></ul><ul><li>容易失焦,然後就放棄 </li></ul>
  5. 6. BDD <ul><li>Behavior Driven Development </li></ul><ul><li>用一句簡單的句子或字彙來描述功能,以減低參與者的誤解。 </li></ul><ul><li>描述你 要做什麼 ,而不是你 怎麼作 。 </li></ul><ul><li>Getting the word right was the starting point for the development of BDD. </li></ul><ul><li>BDD是用來加強TDD,而非取代TDD。 </li></ul>
  6. 7. BDD methods <ul><li>用一個句子來描述你的測試內容。 </li></ul><ul><li>用簡單的文法(sentence template)讓你的測試不失焦。 </li></ul><ul><li>描述行為,而不是描述測試 </li></ul>
  7. 8. BDD tools for ruby <ul><li>Cucumber </li></ul><ul><li>RSpec </li></ul>
  8. 9. Cucumber
  9. 10. Cucumber <ul><li>Home: http://cukes.info/ </li></ul><ul><li>GitHub: http://github.com/aslakhellesoy/cucumber/ </li></ul><ul><li>Install </li></ul><ul><ul><li>git clone git://github.com/aslakhellesoy/cucumber.git </li></ul></ul><ul><ul><li>sudo rake install_gem </li></ul></ul>
  10. 11. Features Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
  11. 12. 你也可以寫中文 功能 : 加法 為了避免愚蠢的錯誤 作為一個數學白痴 我希望有人能告訴我兩個數相加的結果 場景大綱 : 將兩個數相加 假設 我已經在計算機上輸入 < 數值 _1> 而且 我已經在計算機上輸入 < 數值 _2> 當 我按下 < 按鈕 > 那麼 螢幕上應該顯示 < 結果 > 例子 : | 數值 _1 | 數值 _2 | 按鈕 | 結果 | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
  12. 13. Cucumber Keywords feature: 功能 background: 背景 scenario: 場景|劇本 scenario_outline: 場景大綱|劇本大綱 examples: 例子 given: 假設 when: 當 then: 那麼 and: 而且|並且 but: 但是
  13. 14. RSpec <ul><li>Home: http://rspec.info/ </li></ul><ul><li>GitHub: http://github.com/dchelimsky/rspec </li></ul><ul><li>Install: sudo gem install rspec </li></ul>
  14. 15. Rspec Example describe Calculator do context &quot; 將兩個數相加 &quot; do before(:each) do @calculator = Calculator.new end it &quot; 應該有一個數字已經輸入 &quot;do @calculator.push.should an_instance_of(Fixnum) end end end
  15. 16. M Working from the Outside-In
  16. 17. BDD Step with Cucumber and RSpec
  17. 18. Example <ul><li>User Story </li></ul><ul><ul><li>客戶端在確認與遠端伺服器連線狀態,並登入後,則取回廣告內容。 </li></ul></ul><ul><li>Actor </li></ul><ul><ul><li>客戶端 </li></ul></ul><ul><ul><li>遠端伺服器 </li></ul></ul><ul><li>Behaviour(for client) </li></ul><ul><ul><li>確認連線狀態 </li></ul></ul><ul><ul><li>登入 </li></ul></ul><ul><ul><li>取回廣告內容 </li></ul></ul>
  18. 19. Example: feature 功能 : 連線確認 為了避免無意義的資料擷取動作, 如果我是客戶端電腦, 我會先確認是否與遠端伺服器連線 劇本 : Ping遠端伺服器 假設 我被告知需要向遠端伺服器取得資料 當 我對遠端伺服器發出ping的要求 那麼 遠端伺服器會回傳pong
  19. 20. Example: Passing Feature
  20. 21. Example: Step Definitions <ul><li>你在劇本中的步驟 </li></ul><ul><li>在這裡,關鍵字還不能寫中文 </li></ul>
  21. 22. Example: RSpec <ul><li>先利用劇本中的步驟作為大標題 </li></ul><ul><li>在這個步驟中你需要測試甚麼? </li></ul>
  22. 23. <ul><ul><li>Q and A </li></ul></ul>

×