Sep. 22 18:02~18:47, 20:38~21:05
待測系統
從這一集開始要分別用五種不同的Test Double來實作測試案例。首先先介紹待測系統,上圖是一個套用Command設計模式的監控系統,Server物件有四個函數:
- addCommand:傳入一個ICommand物件(實作ICommand介面的物件),Server會利用向它註冊的ICommand物件來執行監控工作。
- removeCommand:移除一個ICommand物件。
- getCommandSize:傳回註冊的ICommand物件個數。
- monitor:逐一呼叫每一個向它註冊的ICommand物件的execute函數以執行監控工作。
ICommand是一個介面(interface),只有一個函數:
- execute:監控某個特定的設備,監控結果以Result物件表示。
Result物件有兩個函數:
- getStatus:傳回整數代表監控結果,1表示OK,2表示CRITICAL。
- getMessage:傳回字串代表監控結果的敘述。
目前這個監控系統有一個DoorCommand,可以用來監控門是否被打開或關閉。DoorCommand透過IDoor介面來判斷門的開啟或關閉狀態。不同sensor的廠商必須要提供IDoor介面,我們才可以將它安裝在門上面作為監控之用。
***
實作Dummy Object
接下來要練習的題目是「使用Dummy實作ICommand,測試Server.getCommandSize函數」。請鄉民們想一下,要如何讓下列測試案例通過?
上面的測試案例期待getCommandSize()回傳2,也就是代表有兩個ICommand物件向Server註冊。因此只要呼叫server.addCommand()兩次就可以讓測試案例通過。但是addCommand函數需要一個ICommand物件作為參數,先是看看直接傳入null可不可以。
執行結果失敗,看來addCommand函數有檢查傳入的ICommand物件不能是null。
***
為了透過addCommand函數向Server註冊兩個ICommand物件,必須要傳入一個非null的ICommand物件進去。這個ICommand物件可以沒有任何的實作邏輯,只是為了符合addCommand的介面所需而產生的物件。請參考下列的DummyCommand實作。
有了DummyCommand之後,就可以使用它來完成測試案例。
執行結果通過,完成Dummy Object練習。
***
友藏內心獨白:這算打假球嗎?
請問,實作Dummy Object這一段的
回覆刪除"接下來要練習的題目是「使用Dummy實作ICommand,測試Server.addCommandSize函數」"
是不是有打錯字呢?是否為測試Server.getCommandSize函數?
Hi Wales,
刪除謝謝指正,的卻是測試Server.getCommandSize函數,錯誤以修正。