2013-08-19 14 views
4

我試圖從單獨的項目中參考mscorlib假DLL,如下所述。爲什麼不能正確地從一個預製的Fakes項目中引用一個FIX DLL?

我有很多VS12解決方案,我正在使用MS Fakes編寫單元測試。根據以下網址中的建議,我決定爲我的虛假Dlls製作一個項目:Code generation, compilation, and naming conventions in Microsoft Fakes。 這個想法是,假DLL的位置將被本地化,並且我不需要在我的測試項目中散佈大量僞造的DLL。 (我會稱之爲通用假貨庫)。

在我目前的單元測試中,我使用了PresentationCoreSystem.ManagementSystem的墊片。但是,我使用的系統墊片實際上是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假冒不起作用?

回答

0

關於Fakes的一點是它意味着在每個構建中重新生成dll。這對於系統dll來說不那麼重要,但值得記住。你應該把它們放在項目中,因爲你不能確定它們之間的連接是如何進行的。

我不知道墊片是如何實現的,但他們明確地覆蓋了運行時的方法。我認爲我們需要一個開發人員來更詳細地回答它,但它甚至可能成爲mscorlib的一個問題,mscorlib已經對Fakes(按設計)提供了一些片面的支持。

但最終,您的目標似乎是在您的測試項目中節省幾次點擊,同時冒着失去同步的風險。它發生的可能性並不重要 - 它可能不值得讓你的測試不那麼明確。

測試的目標是降低維護成本,因此對於他們來說隱藏東西對於你的普通代碼來說不那麼重要;它只是增加了維護過程的步驟。假貨對大多數人來說足夠神祕,沒有增加'哦'的壓力,但是它被間接引用了......這是否甚至有效?

相關問題