Jan. 26 17:26~18:30; 21:11~ 22:38
今天是除夕,預祝鄉民新年快樂,雞年可以少遇到一些「GGYY的人」。
在〈在IntelliJ IDEA使用Cucumber(上)〉已經把IntelliJ IDEA關於使用Cucumber的環境都設定好了,終於可以正式開工。
***
新增Feature與Step Definition
▼在上集中已經產生hello_world.feature,現在沿用之前的範例把內容貼上。這時候發現檔案前面出現一個小燈泡的圖示。
▼點選小燈泡圖示之後出現「Create step definition」與「Create all steps definition」這兩個選項。當然選取「Create all steps definition」產生全部的步驟定義。
▼把步驟定義檔取名為HelloStepdefs,檔案位置先用預設值隨便放沒關係,等一下再整理、移動。記得把File type:選擇「Java」(預設是Java 8),如果用預設值會有一個小問題稍後再說明。
▼在test目錄新增一個steps package準備把剛剛產生的HelloStepdefs拉過去。
▼IntelliJ IDEA會自動幫我們修改HelloStepdefs的package name。
▼打開HelloStepdefs檔案,耶,奇怪,剛剛不是選擇「Create all steps definition」請IntelliJ IDEA幫我們產生全部的step定義,應該要有三個step定義怎麼會只有一個?
▼這時候切換回hello_world.feature,在「When I ask it to say hi」這一行按下滑鼠右鍵,選Go To—>Declaration或【command】+【B】。
▼會直接跳到HelloStepdefs檔案的第11行,表示hello_world.feature的「When I ask it to say hi」已經透過HelloStepdefs的@When("^I ask it to say hi$") 建立連結。
▼但是問題還是沒解決,少了2個step定義沒有自動產生。現在打開hello_world.feature,在還沒產生step定義的「Given I have a greeting application with "Hello"」或「Then I receive "Hello World"」按【option (Alt)】+【enter】,選擇「Create all steps definition」再產生一次。
▼這時候IntelliJ IDEA會詢問要產生新的檔案還是重用之前的檔案,當然選擇產生在HelloStepdefs(steps)。
▼這時候3個step定義都已經出現在HelloStepdefs。很顯然這是一個Cucumber外掛的bug,要跑兩次才可以產生全部的step定義。
***
執行測試:方法一
▼現在空的驗收測試案例已經完成,依據BDD/TDD開發流程第一步就是產生一個失敗的測試案例。這個測試案例要怎麼跑?在hello_world.feature檔案按下滑鼠右鍵,選擇Run ‘Feature:hello_world’。
▼奇怪,怎麼執行之後出現:
Undefined step: Given I have a greeting application with "Hello"
Undefined step: When I ask it to say hi
Undefined step: Then I receive "Hello World"
1 Scenarios (1 undefined)
3 Steps (3 undefined)
0m0.000s
顯然是找不到對應的step定義檔,怎麼會這樣?原來是還有一個地方需要設定,告訴執行測試案例的程式(test runner)要去那裡尋找step定義檔。
▼點選右上方那個小的倒三角形,然後選擇「Edit Configurations…」。
▼在Clue 設定輸入steps。
▼再執行一次hello_world.feature,這時候錯誤訊息不同,有找到step定義檔只不過這些step定義檔還沒有實作。
▼請注意畫面左方列出了Given…When..Then三個步驟,如果直接用滑鼠雙擊某個步驟,會自動跳到hello_world.feature檔案中相對應的原始定義。
***
執行測試:方法二
▼直接在IntelliJ IDEA設定Glue屬性把feature檔案與step definition連結起來固然方便,但如果要在IntelliJ IDEA以外的環境執行驗收測試就沒辦法這麼做。這時候可以透過JUnit 4的客製化test runner功能來讓Cucumber執行驗收測試。首先新增一個GreetingTest Java檔案。
▼在裡面輸入一下內容,注意以下參數要設定Cucumber的test runner才找到的feature與step definition的對應。
@CucumberOptions(
features = "src/test/Features/hello_world.feature",
glue = {"steps"})
▼執行結果如下所示,點選右邊的步驟並無法像剛剛方法一可以直接跳到定義該步驟的feature檔案,這是用JUnit 4去跑Cucumber在IntelliJ IDEA上的小缺點。
***
實作Step定義
▼到目前為止HelloStepdefs還沒有實作,實作方式直接參考〈BDD(5):第一個Cucumber-JVM範例,下集〉。
▼跑驗收測試案例,現在通過了。
▼透過JUnit 4跑驗收測試,結果一樣通過。
***
結論
這個例子算是Cucumber的「Hello World」等級的小程式,非常簡單,主要目的在於介紹如何在IntelliJ IDEA的環境中使用Cucumber。把工具與環境設定的問題先解決,接下來要練習書本或網路上的各種範例就簡單很多。
***
友藏內心獨白:Java工具對於Cucumber的支援還是有很大的進步空間啊。
延伸閱讀
要評論一個IDE工具好不好用,最好還是以最高等級的版本去測比較客觀一點,社群版基本上都是最陽春的功能,不能因為社群版的功能少,你就說他支援度不好,建議之後測試使用終極版比較客觀。
回覆刪除