l

2013年7月26日 星期五

BDD(4):第一個Cucumber-JVM範例,上集

July 23 21:12~22:45

看了前三集,假設鄉民們已經知道BDD的基本觀念、Cucumber運作原理、以及如何在Eclipse中執行Cucumber-JVM,在這一集利用一個簡單但完整的範例,介紹一個使用Cucumber-JVM開發應用程式的例子。

***

新增Feature檔案

這個例子在《BDD(2):大家來吃小黃瓜之Cucumber運作原理》已經介紹過了,客戶要你開發一支應用程式,這支程式有一個功能叫做Greeting。在撰寫程式之前,客戶(或是開發團隊)先幫這個功能寫出驗收測試文件。

螢幕快照 2013-07-23 下午9.25.16

 

Cucumber-JVM的驗收測試檔案要描述在.feature的文字檔當中。請鄉民們先用Eclipse建立一個Java專案,然後新增一個名為test的source folder。在這個目錄中建一個resources目錄,然後新增一個文字檔hello_world.feature,檔案內容就是上圖中的文字。

螢幕快照 2013-07-23 下午9.28.15

***

執行測試案例

Cucumber-JVM整合了JUnit 4,要執行上面這個驗收測試,請鄉民們先新增一個名為GreetingTest的Java class(檔案可以隨便取,只要開發團隊知道這個class是用來代表Greeting這個feature就可以了)。

螢幕快照 2013-07-23 下午9.39.28

 

新增CreetingTest class之後,在class上面貼上@RunWith@Cucumber.Options這兩個annotation。

螢幕快照 2013-07-23 下午9.44.45

@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執行這個測試。

螢幕快照 2013-07-23 下午9.53.23

 

執行結果如下圖所示。看到JUnit變「綠燈」不要高興得太早,其實沒有任何測試案例被執行。

螢幕快照 2013-07-23 下午9.51.51

 

真正的「綠燈」畫面應該是這個樣子,每一個測試案例前面會有一個「打勾」的小icon。這是鄉民們接下來要努力的目標。

image

****

撰寫膠水程式

執行完JUnit之後,請鄉民們切換到Eclipse的Console view,會看到如下的畫面。

螢幕快照 2013-07-23 下午9.59.26

 

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。

螢幕快照 2013-07-23 下午10.18.48

寫好之後執行JUnit,發現這次錯誤訊息不同。Cucumber-JVM找到step definition,但是step definition的內容尚未實做。所以接下來的步驟就是要去填滿step definition的內容,讓測試案例可以通過。

螢幕快照 2013-07-23 下午10.21.22

***

今天先練習到這邊,下一集再繼續完成後半段的練習。看到這邊鄉民們不知道有沒有感受到一點BDD—「行為驅動開發」的味道:

  1. 先定義驗收測試條件,也就是應用程式應有的行為。
  2. 然後執行驗收測試,這時候因為找不到step definition而測試失敗。
  3. 定義step definition。
  4. 然後執行驗收測試,這時候因為step definition的內容是空的所以測試失敗。
  5. 填寫step definition的內容,在這個步驟鄉民們會開始思考production code的設計與實作。
  6. 當production code完成,整個驗收測試案例便可通過(或是反過來說,當最後驗收案例通過,就代表production code已經完成)。

下集會介紹5、6兩個步驟,敬請期待。

***

友藏內心獨白:到目前為止都還蠻簡單的。

2 則留言:

  1. 請問為什我的hello_world.feature沒有綠色說話的圖示呢?(不好意思我是初初初初學者)

    回覆刪除