【发布时间】:2018-11-08 01:29:33
【问题描述】:
我在尝试从单独的项目中引用 mscorlib fake DLL 时遇到问题,如下所述。
我有许多 VS12 解决方案,我正在使用 MS Fakes 为其编写单元测试。根据以下 URL 中的建议,我决定为我的假 Dll 创建一个项目:Code generation, compilation, and naming conventions in Microsoft Fakes。 这个想法是伪造 DLL 的位置将被本地化,我不需要在我的测试项目中散布大量伪造的 DLL。 (我将其称为普通假货库。)
在我当前的单元测试中,我使用来自PresentationCore、System.Management 和System 的垫片。但是,我使用的系统垫片实际上位于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 文件,它们可以清除然后按名称添加类。
但是,在我的测试项目中,当我从常见的 fakes 库中添加 mscorlib.4.0.0.0.Fakes DLL 的引用时,使用 Convert 和 DriveInfo 垫片的测试无法运行。相反,测试方法会引发 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException,命名不受支持的 shimmed 类。使用 PresentationCore 和 System.Management 功能的测试在引用常见的 fakes 库时仍然有效。
但是,如果我在我的测试项目中直接(间接地)为 System 添加 Fakes 程序集,请在我的测试项目中创建完全相同的 mscorlib.fakes 文件,并添加对 local 的引用mscorlib.4.0.0.0.Fakes Dll,链接到常见假货库时引发异常的测试运行无故障。
我使用对象浏览器查看了 common fakes 库中的 mscorlib 伪造 DLL,并将其与本地构建的 DLL 进行了比较,它们似乎是相同的。
有谁知道为什么在 common fakes 库中引用 mscorlib fake 不起作用?
【问题讨论】:
标签: c# .net mocking microsoft-fakes shim