你真的應該看看使用模擬框架來隔離你的測試與實際的依賴對象。我假設你使用C#(來自var
關鍵字),所以我將以RhinoMock爲例。
var respository1 = MockRepository.GenerateMock<Repository1>();
repository1.Expect(r => r.SomeMethod()).Return(someValue);
var repository2 = MockRepository.GenerateMock<Repository2>();
repository2.Expect(r => r.Method2()).Return(someValue);
...
var service = new Service(repository1, repository2, ...);
repository1.VerifyAllExpectations();
repository2.VerifyAllExpectations();
使用這種機制可以控制模擬對象如何測試迴應你的等級和你相關的依賴隔離測試代碼。您還可以通過驗證您設置的期望已被滿足(稱爲)來測試您的課程是否與它所依賴的課程正確交互。
至於構造函數中的參數個數,可以考慮提供一個默認的構造函數,它不需要任何參數並且具有公共設置的依賴關係。然後,您可以使用C#3.0中的便利機制來定義它們。
var service = new Service {
Repository1 = repository1,
Repository2 = repository2,
...
};
@tvanfosson:我喜歡我的版本的標題更好,其實;-) – mghie 2009-02-11 21:00:01
我要修復它,但我敢肯定,我嘗試它的那一刻相同的競爭條件將instaniate本身擾亂了標題再次。 – 2009-02-11 21:01:42