2010-03-24 84 views
6

我剛剛完成了Michael Feathers的書Working Effectively with Legacy Code。這是一本關於如何有效創建測試接口並利用它們來獲取現有代碼的好書。.NET中的鏈接接縫

他談論的技術之一是使用「鏈接接縫」。基本上這個想法是,如果你有代碼依賴於另一個庫,你可以使用鏈接器插入一個不同的庫進行測試,而不是生產。這可以讓你通過模擬庫感知測試條件,或者避免調用具有真實世界效果的庫(數據庫,電子郵件等)等。

他給出的例子是用C++編寫的。我很好奇,如果這種技術(或類似的)可能在.NET/C#中?

+1

請注意,當所有其他失敗時,這應該是最後的手段。如果它被過度使用,在某一點之後,你可能會失去跟蹤你在哪裏使用的庫,這可能會導致測試和生產中的細微錯誤。 – 2010-03-24 12:20:04

+0

哦,我絕對同意。而TBH我不確定我會永遠使用它。我更感興趣的是,如果它甚至可能在.NET堆棧上。 – RationalGeek 2010-03-24 12:25:20

回答

4

是的,它是可能的.NET。在最簡單的情況下,可以用另一個相同名稱替換一個程序集

對於強命名的程序集,應該更改版本號,然後配置程序集綁定以覆蓋編譯時間「鏈接」版本。企業,機器,用戶或目錄級別。

有一些警告,與安全有關。如果您希望替換的程序集已被強烈命名,則需要在簽署程序集時重新創建相同的公鑰。換句話說,如果您作爲應用程序開發人員不希望您的庫「嘲弄」(或者用惡意代碼替代),那麼您必須確保程序集已簽名且私鑰不公開。

這就是爲什麼你不能嘲笑DateTime - 因爲微軟強烈命名了.Net的核心庫。