2

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

 10 months ago
source link: https://teddy-chen-tw.blogspot.com/2023/03/ezspec7background.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.

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

March 23 21:08~22:20

截圖 2023-03-23 下午10.19.07

▲第七集了,快到山頂了沒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。

截圖 2023-03-23 下午9.17.17

▲圖1:ezSpec的Background範例

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

截圖 2023-03-23 下午9.47.18

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

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

截圖 2023-03-23 下午9.55.14

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

結論

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK