5

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

 2 years ago
source link: http://teddy-chen-tw.blogspot.com/2013/07/bdd4cucumber-jvm.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

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

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—「行為驅動開發」的味道:

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK