[每週軟件]:Cucumber:Second Day

##簡介##ios


OSChina 的連接 Cucumberruby

ruby 的 BDD框架,相似天然語言的DSL,適用於BDD模式和驗收測試。app

Book框架

The Rspec Book測試

The Cucumber Bookthis

本系列全部內容取自The Rspec Book 雖標記原創 但其實我只是翻譯總結了一下操作系統

##關鍵字##.net

• Feature命令行

• Background翻譯

• Scenario

• Scenario outline

• Scenarios (or examples)

• Given

• When

• Then

• And (or but)

• | (which is used to define tables)

• """ (which is used to define multiline strings)

• # 註釋

##Big Picture##

Cucumber能夠分爲三部分:Features,Step Definition,cucumber 命令

Features的語法是Gherkin(另外一個ruby gem),一個Features一個標題,一個描述,多個scenario,一個scenario有多個step

Step Definition是相似對Features的劃分並測試,支持多語言。

當cucumber命令的時候會自動分析features並找到step definitions

##Features##

標題

features的標題有點像用例,一個標題應該是主謂結構,「誰」作「什麼」

描述

描述是對標題的進一步展開描述,應該說明 誰 作什麼 期待什麼結果 三部份內容

<!-- lang: ruby -->
As a <role>
I want <feature>
So that <business value>

國際化

在你的Features文件開頭加上語言聲明,就可使用中文的關鍵字 #language: zh-CN 完整的語言支持請查看cucumber --i18n help

<!-- lang: ruby -->
 $ cucumber --i18n zh-CN
  | feature          | "功能"                   |
  | background       | "背景"                   |
  | scenario         | "場景", "劇本"             |
  | scenario_outline | "場景大綱", "劇本大綱"         |
  | examples         | "例子"                   |
  | given            | "* ", "假如", "假設", "假定" |
  | when             | "* ", "當"              |
  | then             | "* ", "那麼"             |
  | and              | "* ", "並且", "而且", "同時" |
  | but              | "* ", "可是"             |
  | given (code)     | "假如", "假設", "假定"       |
  | when (code)      | "當"                    |
  | then (code)      | "那麼"                   |
  | and (code)       | "並且", "而且", "同時"       |
  | but (code)       | "可是"                   |

Scenarios

一個Scenario能夠理解爲對一種結果的期待,例如一個網上訂票系統,

<!-- lang: ruby -->
Scenario: 訂購成功!
Scenario: 無票!
Scenario: 用戶沒有登陸!

Step

一個Secenario有多個step,接上例子

<!-- lang: ruby -->
Scenario: 訂購成功!
    Given a train with "130" tickets and "0" taken

step能夠是Given When Then And等關鍵字 其中用雙引號擴起來的能夠做爲參數使用

例如在寫step definition的時候

<!-- lang: ruby -->
Given /^a train with "(.*?)" tickets and "(.*?)" taken$/ do |arg1, arg2|
  @train = Train.new
  @train.ticket=arg1
  @train.taken_ticket = arg2
end

Given, When, And和Then的用法都差很少,And的語義取決於它的上一個是什麼,例如Given 。。。And。。。那麼And的語義就是Given

Features文件組織

./features 子文件夾下的features在你在.目錄執行cucumber features的時候都會自動加載 也能夠單獨執行某個子文件夾 cucumber features/tickets

Tags

一個Cucumber tag是以@開頭 緊跟小寫字母的一個標識符 例如@wip等 名稱能夠自定義。

一個tag能夠標記在features上 或者 Scenario上 一個feature內部的Scenario會自動繼承features的tag

例如:

<!-- lang: ruby -->
@approved @iteration_2_1
Feature: Im still working on this!

@wip    
Scenario: Its not finished.

這裏Scenario就有@approved和@wip兩個標籤

那麼標籤有什麼用呢,標籤的做用跟上面子文件夾的做用類似,好比上面咱們完成了迭代1 正在進行迭代2的第一個階段(@iteration_2_1) 就能夠單獨運行迭代2_1的features內的Scenario

<!-- lang: ruby -->
cucumber --tags @iteration_2_1

這樣已經經過的和尚未在進行中的就能夠不用執行了。

在命令行使用上tag還有一些AND OR NOT操做 以下

<!-- lang: ruby -->
cucumber --tags @foo, @bar  
#@foo || @bar
cucumber --tags @foo --tags @bar
#@foo && @bar
cucumber --tags ~@foo
#!@foo

tags的使用靈活,能夠適應不一樣場景,好比不一樣的語言,不一樣的操做系統使用不一樣的tags來標識。

##To Be Continued...##

今天先到這裏了,明天繼續看step definition的細節。

相關文章
相關標籤/搜索