l

2023年3月24日 星期五

使用ezSpec落實行為驅動開發與實例化需求(7):將共用步驟寫在Background

March 23 21:08~22:20


▲第七集了,快到山頂了沒XD

 

前言

前幾集介紹如何撰寫Scenario與Scenario Outline,基本上已經可以處理絕大部分的問題。今天介紹Background,讓鄉民們可以共用不同Scenario之間相同的步驟。

***

Background也是一種Scenario

ezSpec將Background也視為一種Scenario,但它身上通常只有Given與And,用來準備不同Scenario中共用狀態的內容。請參考圖1,首先使用第42行newBackground()開啟一個新的Background。與Scenario和Scenario Outline相同,Background一定要隸屬於某一個Story。

新增完Background之後,就可以和寫Scenario一樣,撰寫Step。圖1第44行將backgroundSideEffect這個data member的值設為100,然後在47行將UserId設為UUID。


▲圖1:ezSpec的Background範例

***

 

圖2的Scenario因為可以直接使用到Background的Given與And,所以它就不需要再撰寫一次Given與And,所以它的第一個Step直接就是第61行的When。在第63行中檢查backgroundSideEffect的值使否為100,如果是,就表示Background有先輩執行,接著再執行這個Scenario。第66行則是讀取Background所新增的UserId。


▲圖2:在ezSpec的Scenario中讀取Background所設定的資料範例

 

圖3為執行圖2所產生的報表,第9到13為Background的內容,第15~18行為圖2的內容。由這個報表可以很清楚的看出來,雖然Background可以達到重用Step的優點,但使用它的Scenario閱讀起來會變得有點……斷頭…..的感覺。Given不見了,直接從When開始。也就是說,使用者要從重用性與可讀性之間做出取捨。當然也可以修改報表產生程式,重複將Background的Step複製到每一個使用它的Scenario,以提升一點可讀性。


▲圖3:執行使用Background的Scenario所產生的報表

***

 

結論

寫到這裡,ezSpec的基本功能算是介紹完畢。在Gherkin 6中新增一個Rule關鍵字,用來將Scenario分類到某一個業務規則。Teddy覺得這個關鍵字可以用JUnit 5內建的@Tag annotation達到類似效果,所以暫時沒有在ezSpec中直接支援。

ezSpec除了基本的Gherkin語法以外,也參考了concurrentSpec,支援描述併行行為的功能,下一集介紹這個功能。

***

友藏內心獨白:共用經常會降低可讀性。

沒有留言:

張貼留言