Microsoft Fakes 的強式名稱(Strong Name)設定

Apr 10, 2019




情境

在建立測試時,經常需要存取原本僅限組件內部存取的類別或是函式,此時就可以透過 InternalVisiableTo 這個標籤開放待測組件的可見層級權限給測試專案,若是待測組件採用強式名稱,則測試專案也要加上對應的簽名。

另外,在使用 Microsoft Fakes 框架動態建立待測函式庫的假物件函式庫時,也需要待測函式庫開放其可見層級權限時,也僅需要在待測試組件建立對應的標籤即可。

但是若待測組件為強式名稱時,也需要為動態建立的假物件函式庫加上公開金錀,本文就說明如何透過設定,讓假物件函式在動態建立時加上公開金錀。

解決方案

在建立待測組件的假物件函式庫參照後,Microsoft Fakes 框架會自動在專案下建立名稱為「Fakes」的檔案夾,並建立副檔名為「.fakes」的設定檔,這個檔案可在 Visual Studio 中直接開啟編輯且支援 IntelliSense 功能,不用自己查可用節點跟屬性。

這個「.fakes」的設定檔是採用 XML 格式,預設內容就只有指定的組件名稱。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
    <Assembly Name="FileSystem"/>
</Fakes>

接下來就是在這個設定檔案加上「Compilation」節點,並給定「KeyFile」屬性為金錀檔案完整路徑就完成設定,調整後就類似下面範例,當然你要填入自己的檔案路徑。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
    <Assembly Name="FileSystem"/>
    <Compilation KeyFile="full_path_to_the_alternate_snk_file" />
</Fakes>

接著重新編譯待測組件及測試專案,則待測組件中原本僅限組件內取存的類別跟方法都有建立出對應的假物件供測試調用。

後記

在找尋這個問題的解法時,起初以「Fakes + Strong Name」的思路進行,心想這應該是很常見的情境,怎麼好像都沒有人發問,在偶然發現 Microsoft Fakes 其實是有自訂參數的設定,才一下找到這篇說明(繁中版)。