July 23 21:12~22:45
看了前三集,假設鄉民們已經知道BDD的基本觀念、Cucumber運作原理、以及如何在Eclipse中執行Cucumber-JVM,在這一集利用一個簡單但完整的範例,介紹一個使用Cucumber-JVM開發應用程式的例子。
***
新增Feature檔案
這個例子在《BDD(2):大家來吃小黃瓜之Cucumber運作原理》已經介紹過了,客戶要你開發一支應用程式,這支程式有一個功能叫做Greeting。在撰寫程式之前,客戶(或是開發團隊)先幫這個功能寫出驗收測試文件。
Cucumber-JVM的驗收測試檔案要描述在.feature的文字檔當中。請鄉民們先用Eclipse建立一個Java專案,然後新增一個名為test的source folder。在這個目錄中建一個resources目錄,然後新增一個文字檔hello_world.feature,檔案內容就是上圖中的文字。
***
執行測試案例
Cucumber-JVM整合了JUnit 4,要執行上面這個驗收測試,請鄉民們先新增一個名為GreetingTest的Java class(檔案可以隨便取,只要開發團隊知道這個class是用來代表Greeting這個feature就可以了)。
新增CreetingTest class之後,在class上面貼上@RunWith與@Cucumber.Options這兩個annotation。
@RunWith這個annotation告訴JUnit 4,這一個測試案例請用Cucumber.class來執行它,而不要用JUnit 4預設的runner(因為JUnit 4看不懂Cucumber-JVM的驗收測試格式)。@Cucumber.Options裡面包含傳給Cucumber.class執行驗收測試時的參數,features這個參數告訴Cucumber.class,請執行Java classpath裡面的resources/hello_world.feature這個檔案中的驗收測試(也就是檔案中的每一個scenario)。
寫好之後用JUnit執行這個測試。
執行結果如下圖所示。看到JUnit變「綠燈」不要高興得太早,其實沒有任何測試案例被執行。
真正的「綠燈」畫面應該是這個樣子,每一個測試案例前面會有一個「打勾」的小icon。這是鄉民們接下來要努力的目標。
****
撰寫膠水程式
執行完JUnit之後,請鄉民們切換到Eclipse的Console view,會看到如下的畫面。
Cucumber-JVM好心提醒鄉民們,它找不到這個feature裡面的scenario的每一個step相對應的step definition程式(相關名詞說明請參考《BDD(2):大家來吃小黃瓜之Cucumber運作原理》,step definition就是所謂的膠水程式)。為什麼找不到?因為根本還沒寫…。所以下一步就是要撰寫step definition,Cucumber-JVM已經告訴鄉民們,有三個step definition要撰寫。請鄉民們新增一個名為HelloStepdefs的Java class(檔案名稱可以隨便取),然後把Console view裡面的這三個step definition拷貝起來複製到HelloStepdefs。
寫好之後執行JUnit,發現這次錯誤訊息不同。Cucumber-JVM找到step definition,但是step definition的內容尚未實做。所以接下來的步驟就是要去填滿step definition的內容,讓測試案例可以通過。
***
今天先練習到這邊,下一集再繼續完成後半段的練習。看到這邊鄉民們不知道有沒有感受到一點BDD—「行為驅動開發」的味道:
- 先定義驗收測試條件,也就是應用程式應有的行為。
- 然後執行驗收測試,這時候因為找不到step definition而測試失敗。
- 定義step definition。
- 然後執行驗收測試,這時候因為step definition的內容是空的所以測試失敗。
- 填寫step definition的內容,在這個步驟鄉民們會開始思考production code的設計與實作。
- 當production code完成,整個驗收測試案例便可通過(或是反過來說,當最後驗收案例通過,就代表production code已經完成)。
下集會介紹5、6兩個步驟,敬請期待。
***
友藏內心獨白:到目前為止都還蠻簡單的。
nice tutorial for bdd
回覆刪除請問為什我的hello_world.feature沒有綠色說話的圖示呢?(不好意思我是初初初初學者)
回覆刪除