2013-10-10 38 views
2

我正在開發一個解釋器,並且想要對解釋模型的「execute」方法進行內部測試。 execute方法沒有輸入或輸出,所以測試方法的唯一方法(至少從我所知道的方面來看)是模擬內部方法調用以查看它們以正確的順序執行。設計和測試這個類的正確方法

目前,我有以下類:

  1. ExecutableInstance - 可以執行模型類。
  2. ExecutableInstanceFactory - 單例類(實現爲一個枚舉),創建可執行實例,不同的方法取決於它給出的參數。
  3. ModelAnalyzer - 包含方法來分析模型

的解釋單身類調用ExecutableInstance類,然後調用ModelAnalyzer瞭解模型內部執行情況的​​方法。然後使用ExecutableInstanceFactory創建新的ExecutableInstance,然後根據模型的定義調用方法​​。

我的想法是模擬ExecutableInstanceFactory類,以便它返回模擬ExecutableInstace s,然後我可以測試執行順序。但這意味着我必須將ExecutableInstanceFactory注入ExecutableInstance。由於它是單身人士,因此將其作爲參數傳遞是愚蠢和愚蠢的。我想過使用谷歌的Guice作爲DI ......但我一直在試圖做到這一點。

我的方向是否正確?如果是這樣,這應該如何實施?

回答

1

我會從這個執行方法中做出幾個更小的方法。例如 - 一種解析方法,它將某些事情返回給execute方法,然後另一種方法對返回的數據執行某些操作並返回其他數據等等。然後,您不必測試Execute方法,只需測試更小的那些方法。這也可以讓你更容易地發現錯誤。

+0

想到了這一點,但這會破壞'ExecutableInstance'類的封裝。這被認爲今天好嗎? – vainolo

+0

只要方法有意義,我不認爲封裝會中斷,因爲每種方法都可以用於其他情況 - 例如,如果您只想解析代碼而不執行它。 –

1

執行方法沒有輸入或輸出

所以行爲應當在類合作者(使用嘲笑)驗證。

由於它是一個單身人士,將它作爲參數傳遞是愚蠢和愚蠢的。

您有測試問題的事實表明您的設計存在缺陷。擺脫一個單身人士並注入合作者。