天天看點

《Cucumber:行為驅動開發指南》——2.5 運作程式

本節書摘來自異步社群《cucumber:行為驅動開發指南》一書中的第2章,第2.5節,作者:【英】matt wynne , 【挪】aslak hellesy著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

接下來我們實作下一個步驟,編輯 features/step_definitions/calculator_ steps.rb,修改第二個步驟定義如下:

這段代碼試圖運作我們的電腦程式calc.rb,同時傳入上一個步驟儲存下來的輸入,并用另一個執行個體變量儲存輸出。接下來它檢查一個名字很特别的(實際上是很隐晦的)ruby變量$?,來核實指令是否成功運作了,如果運作失敗則抛出一個錯誤。記住,如果步驟定義抛出一個錯誤,cucumber就會将步驟标記為失敗,這就是實作這個目的最簡單的方法。

這時我們運作cucumber,應該就能看到它真正去嘗試運作電腦了:

這次步驟失敗了,因為我們還沒有可運作的calc.rb程式。你應當看到cucumber在步驟下面将抛出錯誤所産生的輸出都用紅色标亮了,這能幫助你定位問題。

你可能會想,明知calc.rb這個檔案還不存在,卻依然編寫代碼試圖去運作該程式,這樣做有點奇怪。我們是故意這麼做的,因為我們想確定在深入到解決方法的實作之前擁有一個功能完備的測試。基于這條紀律編寫測試意味着我們可以信任測試,因為我們看到這些測試失敗了,當測試通過時我們就可以滿懷信心地認為任務真的完成了。對于我們所謂的由外向内開發,這種優雅的節奏是其中的重要部分,初看起來這好像有點奇怪,我們希望通過本書展現這種開發方式的一些顯著的益處。

由外向内開發還有另外一個好處:在未花任何精力實作電腦之前,我們就有機會從使用者角度考慮電腦的指令行接口。而在這個階段,如果我們意識到接口的一些問題,是非常容易做出改變的。