簡體   English   中英

打破類中所有依賴項的最簡單,最快捷的方法

[英]Simplest, fastest way to break out all dependencies from a class

在使用遺留代碼並嘗試創建測試時,我經常從類或方法中分離出依賴關系,因此我可以使用模擬來為這些依賴項編寫單元測試。 依賴關系通常以調用靜態類和使用構造函數中的new關鍵字或該類中其他位置創建的對象的形式出現。

在大多數情況下,靜態調用通過包裝靜態依賴項來處理,或者如果它以StaticClass.Current.MethodCall()形式的單例模式(或類似)通過其接口傳遞該依賴項而改為構造函數。

在大多數情況下,只需在構造函數中傳遞該接口即可替換構造函數中new關鍵字的使用。

在大多數情況下,在類的其他部分中使用new關鍵字可以通過與上面相同的方法處理,也可以根據需要創建工廠,並在構造函數中傳遞工廠的接口。

我總是使用Resharpers重構工具來幫助我解決所有這些問題,但是大多數事情仍然是手工勞動(可能是自動化的),對於一些遺留的類和方法來說,這可能是一個非常繁瑣的過程。 是否有任何其他重構插件和/或工具可以幫助我完成此過程? 是否“通過一次點擊”從重構工具中突破了所有依賴性? =)

聽起來像所有這些步驟對於許多開發人員而言是常見的並且是一個常見問題,在我嘗試將插件寫入Resharper或CodeRush之前,我不得不問,因為有人可能已經嘗試過這個...

添加:

反思下面的答案:即使您可能不想一次性突破所有內容(一次點擊總突破可能會導致更多問題而不是它有幫助)仍然能夠簡單地突破1個方法依賴關系,或輕松地突破1-2個依賴關系,會有很大的不同。

此外,重構代碼有一個“嘗試,看看只是為了學習所有東西是如何組合在一起發生的事情”的衡量標准,並且一鍵完全突破將有助於這個過程噸,即使你不檢查該代碼..

我認為沒有任何工具可以為您自動化。 使用遺留代碼意味着 - 如您所知 - 一次只需幾步就可以更改代碼。 這些步驟通常都很小,以防止出錯。 通常,您應該進行的第一個更改是使該代碼可測試的更改。 在編寫測試之后,您可以通過修復錯誤或實現RFC來更改代碼的這一部分。

因為你應該采取小步驟,我相信很難使用重構工具神奇地使所有依賴關系消失。 對於遺留系統,您幾乎不需要立即進行大的改變,因為破壞的風險(並且由於缺乏測試而沒有發現)太大了。 但是,這並不意味着重構工具在這種情況下無用。 反之; 他們幫了很多忙。

如果您還沒有,我建議您閱讀Michael Feathers的“ 有效使用遺留代碼 ”一書。 它詳細描述了一系列模式,可幫助您將遺留代碼重構為更易測試的系統。

祝好運。

在涉及靜態調用依賴項時,您可能需要查看Moles 它能夠在運行時執行代碼注入,以使用您自己的測試實現來存根任何靜態或非虛擬方法調用。 這對於測試未使用可測試的依賴注入接口設計的遺留代碼非常方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM