我在尝试从单独的项目中引用mscorlib 假 DLL时遇到问题,如下所述。
我有许多 VS12 解决方案,我正在使用 MS Fakes 为其编写单元测试。根据以下 URL 中的建议,我决定为我的假 Dll 创建一个项目:Microsoft Fakes 中的代码生成、编译和命名约定。这个想法是伪造 DLL 的位置将被本地化,我不需要在我的测试项目中散布大量伪造的 DLL。(我将其称为普通假货库。)
在我当前的单元测试中,我使用来自PresentationCore
,System.Management
和System
. 但是,我使用的 System shims 实际上是 in mscorlib.dll
,更具体地说是 Convert (静态类)和 DriveInfo (密封类)。因为我只需要 mscorlib 中的这两个类(现在),所以我为 mscorlib 创建了以下 .fakes 文件:
<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 文件,这些文件可以清除然后按名称添加类。
但是,在我的测试项目中,当我从我的 common fakes 库中添加 mscorlib.4.0.0.0.Fakes DLL 的引用时,使用 Convert 和 DriveInfo 垫片的测试不会运行。相反,测试方法会引发 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException,命名不受支持的 shimmed 类。使用 PresentationCore 和 System.Management 功能的测试在引用通用假库时仍然有效。
但是,如果我在我的测试项目中直接(以及间接添加 mscorlib)为 System 添加 Fakes 程序集,请在我的测试项目中创建完全相同的 mscorlib.fakes 文件,并添加对本地mscorlib.4.0.0.0.Fakes Dll 的引用,即链接到常见假货库时引发异常的测试运行时不会出现故障。
我使用对象浏览器查看了 common fakes 库中的 mscorlib 伪造 DLL,并将其与本地构建的 DLL 进行了比较,它们似乎是相同的。
有谁知道为什么在 common fakes 库中引用 mscorlib fake 不起作用?