2010-06-21 48 views
0

我在Google上搜索了一些很好的答案/帖子,並理解了整體概念。我有一個現有的框架(設計不是很好),TDD是一個後來想寫一些NUNIT測試裝置。我可以在不改變現有代碼庫的情況下在現有代碼庫上使用IOC嗎?或者我們從頭開始設計應用程序時使用IOC?測試驅動開發:控制反轉(IOC)

回答

2

我使用這種技術轉換的遺留代碼進行依賴注射美容:如果我創建了一個類只有一個對象

  • ,使它一個字段並在構造函數中創建它。
  • 如果我創建了多個對象,爲該對象創建一個工廠並在構造函數中創建工廠。
  • 在對象上放置接口(我喜歡「IDoThisForYou」風格,因爲它讓我能夠輕鬆理解類的角色,但無論適用於您)。
  • 級聯構造函數 - 使一個構造函數新建對象,並通過接口將它們傳遞給另一個。

現在你可以在你的測試中模擬和DI接口。實際的級聯足夠簡單,您可以通過檢查獲得。最終你會到達可以使用容器的地步,然後你將刪除第一個構造函數;這是實現這一目標的第一步。

(不要用大量的數據模擬出的域對象 - 這是不值得的。)

祝你好運!

+2

+1不模擬域對象 – Gutzofter 2010-06-25 05:47:53

1

它不必從頭開始,但很明顯,你會構建的東西,讓國際奧委會,如果你確實非常痛苦,

但它可以在....這取決於如何去耦修補你的系統是,這可能或可能不是一個大工作。基本上它是一個對象創作模式,所以它隻影響創作點......如果這種做法在整個地方都能完成,那麼它將需要一些清理。

我會先從單元測試開始。擔心國際奧委會作爲第二個問題,它實際上並不需要做TDD

+1

依賴注入不一定需要編寫測試,但對TDD和單元測試來說非常重要 - 強調「單元」。我同意集成一個IoC *容器*是次要的問題,因爲它是DI的一個工具,但是對於可測試性的一些重構措施在設計代碼庫時可能不可避免,而不考慮DI/IoC。 – Jay 2010-06-23 16:17:29

+0

我不完全同意這一點。我認爲這對某種風格的應用來說是真實的。一般來說,這種類型,你看到最有聲音的程序員,這是數據庫支持的業務/網絡應用程序。我發現像嵌入式應用程序這樣的東西幾乎不需要它(儘管如果你真的想要的話,你仍然可以使用它)。通常你需要的只是硬件層的存根。 – 2010-06-23 21:21:26