我試圖從單獨的項目中參考mscorlib假DLL,如下所述。爲什麼不能正確地從一個預製的Fakes項目中引用一個FIX DLL?
我有很多VS12解決方案,我正在使用MS Fakes編寫單元測試。根據以下網址中的建議,我決定爲我的虛假Dlls製作一個項目:Code generation, compilation, and naming conventions in Microsoft Fakes。 這個想法是,假DLL的位置將被本地化,並且我不需要在我的測試項目中散佈大量僞造的DLL。 (我會稱之爲通用假貨庫)。
在我目前的單元測試中,我使用了PresentationCore
,System.Management
和System
的墊片。但是,我使用的系統墊片實際上是mscorlib.dll
,更具體地說是Convert(一個靜態類)和DriveInfo(一個密封的類)。因爲我只需要這兩個類從mscorlib程序(現在)我已經創建了以下.fakes文件爲mscorlib程序:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<StubGeneration>
<Clear/>
</StubGeneration>
<ShimGeneration>
<Clear/>
<Add FullName="Convert"/>
<Add FullName="DriveInfo"/>
</ShimGeneration>
</Fakes>
對於PresentationCore和SystemManagement,我也有類似的.fakes通過文件明確,然後添加類名稱。
但是,在我的測試項目中,當我從我的通用假貨庫中爲mscorlib.4.0.0.0.Fakes DLL添加引用時,使用Convert和DriveInfo墊片的測試不運行。相反,測試方法拋出一個Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException,命名不受支持的shimmed類。使用PresentationCore和System.Management中的功能進行的測試在引用通用假貨庫時仍然有效。
但是,如果我在測試項目直接(和mscorlib程序間接)添加假貨總成系統,創建我的測試項目完全相同的mscorlib.fakes文件,並添加引用到當地 mscorlib.4.0。 0.0.Full Dll,與常見假貨庫連接運行時引發異常的測試沒有出現故障。
我看過使用對象瀏覽器的常見假貨庫中的mscorlib僞DLL,並將其與本地生成的DLL進行比較,它們看起來是相同的。
有沒有人有任何想法,爲什麼引用常見假貨庫中的mscorlib假冒不起作用?