l

2014年10月1日 星期三

Test Double(4):Test Stub

Sep. 22 20:19~21:50

image

 

10月份第八梯次【Design Patterns這樣學就會了–入門實作班】確定開課。現在學正是時候,明年開春可以馬上應用在新案子上,或是為過年後換高薪工作預做準備。早鳥優惠到10月3日截止。

***

接續〈Test Double(3):Dummy Object〉所提到的系統設計,這一集要套用Stub。

Test Stub的題目

先回憶一下系統的類別圖。

螢幕截圖 2014-09-22 22.08.45

 

今天要練習的題目是「使用Stub實作IDoor,用以測試DoorCommand.execute的函數」。先看一下DoorCommand的原始碼,execute函數呼叫_door.getStatus()來檢查門的狀態,如果回傳值是「open」代表門被打開,則execute函數傳回狀態為CRITICAL的Result物件,並將Result物件的敘述字串設為「Door is open:…」。

螢幕截圖 2014-09-22 21.29.09

 

Result物件的程式碼如下。

螢幕截圖 2014-09-22 21.49.15

 

現在鄉民們要測試DoorCommand的execute函數,IDoor物件是它的DOC。如果使用真的IDoor物件來分別測試門被打開與關閉的這兩種情況,難道要真的在執行測試案例的時候放一扇門在旁邊,然後一下子打開、一下子關起來測試?顯然這不是一個好辦法,要怎樣才能通過下面這兩個測試案例呢?

螢幕截圖 2014-09-22 21.37.56

 

實作Test Stub

方法很簡單,實作兩個Test Stub分別叫做StubOpenDoor與stubClosedDoor,前者的getStatus函數固定回傳「open」,後者回傳「not open」。

螢幕截圖 2014-09-22 21.38.51

 

實作完成Test Stub之後,執行剛剛的測試案例,兩個都通過了。

螢幕截圖 2014-09-22 21.42.05

***


友藏內心獨白:Stub的實作通常只要回傳寫死的資料就可以了。

沒有留言:

張貼留言