我有一個名爲FooJob()的類,它在WCF Windows服務上運行。這個類只有2個公共方法,構造函數和一個Run()方法。僅測試中型課堂上的公共方法?
當客戶打電話給我服務,昏暗的作業類的新實例,傳遞一些參數的構造函數,然後調用運行()...
的run()將採取的參數,做一些邏輯,發送(實時)請求外部數據供應商,採取的應對,做一些業務邏輯,然後把它在數據庫中...
是否明智只寫一個單元測試,然後(如果甚至可能)在Run()函數中?或者我會在這裏結束自殺嗎?在這種情況下,我應該鑽入私有函數並單元測試FooJob()類的函數嗎?但是,那麼這會不會「破壞」TDD中一些人認爲的「唯一測試行爲」/公共接口範例?
我意識到這可能是一個含糊不清的問題,但在正確的方向有什麼建議/指導或點,將不勝感激。
Drew
謝謝......但我有一個問題 - 我們在什麼時候過度設計和構建太多的類,何時我們可以單元測試一些私有函數?這裏有什麼一般的經驗法則嗎?只要去你的腸道...? – dferraro 2009-10-20 13:55:18
我建議看看面向對象設計的固體原則(http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod),其中單一責任原則是其中之一。我也儘量不考慮把事情分解成多個類來過度工程,因爲每個類都變得更簡單和更容易理解。我會說「如果你覺得需要單獨測試一個私人方法,那麼它應該是另一個班級」,這將是一個經驗法則,以及我上面所說的必須列出課程責任的內容。 – ColinD 2009-10-20 15:59:48
我把課程分開,直到不能再分開爲止。如果您避免返回值,並將類看作是將消息發送給另一個,則這變得更容易概念化。微類具有非常容易理解的好處,以及添加新行爲通常是通過添加更多類來完成的,這意味着您可以單獨保留現有的經過測試的代碼。這是好事。 – kyoryu 2009-12-03 05:42:51