2

使用ezSpec落實行為驅動開發與實例化需求(4):在Scenario中使用表格

 1 year ago
source link: https://teddy-chen-tw.blogspot.com/2023/03/ezspec4scenario.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

2023年3月21日 星期二

使用ezSpec落實行為驅動開發與實例化需求(4):在Scenario中使用表格

March 21 05:40~6:45

截圖 2023-03-21 上午5.49.00

▲圖1:使用ezSpec在Scenario中讀取單一表格資料範例,表格內容取自《BDD in Action》一書

前言

上一集介紹如何使用ezSpec撰寫Scenario、從Step描述文字內容中讀取參數、以及在不同的Step Definition之間傳遞資料的方法(請參考<使用ezSpec落實行為驅動開發與實例化需求(3):撰寫Scenario與傳遞簡單參數>),今天介紹如何在Scenario中讀取表格資料。

讀取單一表格

請參考圖1的85~87行,ezSpec支援Gherkin的表格,以 | 符號分隔不同的column。通常表格的第一列為表頭,之後每一列為表格內容。ezSpec支援兩種讀取表格的方式:

  • row(int).get(column_name):第一種讀取表格方式請參考圖1的88~90行,env.row(0)拿到表格中第一個row,也就是 |    Jill    |   100,000     |   800           |   這一組資料。接著可以用get(column_name)拿到這個row中不同column的資料,例如 env.row(0).get("owner")拿到Jill。
  • row(first_column_data_in_each_row).get(column_name):圖1的93~95行展示第二種讀取表格方式,用每一個row第一個column的資料當作key,使用env.row(first_column_data_in_each_row)的方式定位到所要讀取的該筆row,然後再用get(column_name)拿到這個row中不同column的資料。例如env.row("Jow").get("points")拿到50,000。

使用表格可以一次指定多筆測試資料,提高Scenario的可讀性。

讀取多個表格

你也可以在一個Scenario中使用多個表格,例如把一個表格當作Given裡面的輸入資料,另一個表格放在Then裡面當作expected result,請參考圖2。

讀取多個表格資料的方式與讀取單一表格相同,但有一點需要注意:「在ezSpec中,一個Scenario同一時間最多只會有一個Active Table。」在圖1中由於該Scenario只定義了一個表格,因此一但表格定義之後,在接下來的Step Definition(Given-When-Then-And)中都可以讀到該表格的資料。在圖2中,第一個表格定義在Given,第二個表格定義在Then。因此Given以及When會讀到第一個表格的資料,而Then則是讀到第二個表格的資料,請參考圖2第171~172行(後面定義的表格會蓋掉上一個定義的表格)。

截圖 2023-03-21 上午6.15.54

▲圖2:使用ezSpec在Scenario中讀取多個表格資料範例,表格內容取自《BDD in Action》一書

結語

這兩集介紹在ezSpec中撰寫Scenario的方式,有使用過Cucumber、SpecFlow或JBehave的鄉民,應該可以很明顯發現兩者的不同之處。因為ezSpec是一種Internal DSL,使用「類Gherkin語法」以Java程式語言採用Specification by Example的方式,用例子(Scenario)來表達規格。

ezSpec的Step Definition以Lambda實作,和其相對應的Step直接綁定,不需要因為Step的文字內容改變而重新產生一個新的Step Definition,可以讓開發人員專心在撰寫Scenario上面,少掉很多工具所帶來的干擾。

採用BDD或Specification by Example的開發方式,經常會產生「執行步驟相同但驗證資料不同的Scenario」,此時就可以用下一集介紹Scenario Outline來簡化這些相似的Scenario。

友藏內心獨白:一表值千言。

沒有留言:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK