6

我正在使用 Microsoft Fakes 测试框架。由于我无法更改的“遗留”代码,我需要使用 shim/moles 方法,因此没有太多办法。它是来自没有源代码的供应商的代码,它是在没有考虑测试的情况下编写的。所以我坚持使用 3 种可能的框架,TypeMock(昂贵)、Telerik 的 JustMock(昂贵)或 Microsoft 的 Fakes。因为我们已经有了 VS Ultimate,所以我们选择了假货。由于大多数人认为他们需要建议以某种方式重写或修改代码以支持使用接口和/或依赖注入,我会提前告诉你,这不是一个选择。

我遇到的问题之一是我试图伪造的库很大,需要使用 64 位版本的 fakes.exe 而不是 32 位 (fakes.x86.exe),它会运行到32 位应用程序的内存限制。

第二个问题是我需要使用 v4.5 框架编译 fakes 库。虽然没有记录,但可以通过命令行来实现。原因是在 v4.5 中,他们在 System.Collections.Generic 中添加了 IReadOnly* 接口,并且库使用了它们。使用 v4 编译时,会抛出一个错误,指出未找到类型,如预期的那样。

问题是,Visual Studio 总是使用 x86 版本和 v4.0 框架,我找不到覆盖它的方法。有人知道如何让它使用 64 位和 v4.5 框架吗?我目前的想法是不使用visual studio的内置东西,只使用命令行并手动引用文件。然后在每次更新 dll 时,我们将手动重新创建它并更新引用。该文件不会经常更新,因此这是可能的。

我用来手动生成 fakes 库的命令行(有人可能会觉得这很有用)是:

"c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\fakes\fakes.exe" <assembly> /tfv:v4.5

帮助命令仅显示 v2、v3.5 和 v4 是 tfv 的可能选项,但只是为了踢我尝试了 v4.5。

我尝试将应用程序上的架构强制为 x64 而不是任何 cpu,它运行的 fakes.exe 没有任何变化。在 .csproj 文件中查看测试,没有变化。查看 fakes.exe 的 .csproj 文件,它说使用框架的 v4,在 Visual Studio 中打开,更改为 v4.5,编译正常。使用 fakes 命令行,编译良好。项目中的.fakes文件中有一个属性允许定义编译器版本,但是设置为v4.5还是不行。我假设 Visual Studio 中从 v4 到 v4.5 的版本更改也更改了程序集引用。如果我能找到它,我的下一个尝试是尝试更改模板项目。

4

3 回答 3

4

@schellack - 这是我如何能够“引用创建的 fakes dll 并确保所需的引用在您的测试项目中”

  1. 在本地编译并运行所有单元测试,并确保它们通过
  2. 在项目的主目录中,与 .csproj 文件位置相同,现在应该有一个“ FakesAssemblies ”目录。目录中将是生成的 System.Web.Mvc.4.0.0.0.Fakes.dll(或您使用的任何版本号)。对 System.Web.Mvc.4.0.0.0.Fakes 的项目引用已经有指向该目录和 dll 的提示路径。 此目录和 dll 都需要添加到源代码管理中。 它们不需要添加到 VS。
  3. 为了让我们的 CI 构建机器能够编译,我还必须将 Microsoft.QualityTools.Testing.Fakes.dll 添加到项目中。
    1. 我在 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies 中找到了 Microsoft.QualityTools.Testing.Fakes.dll
    2. 在项目的主目录中,与 .csproj 文件的位置相同,有一个“Fakes”目录,它包含在项目中(在 VS 中可见)以及在源代码管理下。它有一个 .fakes 文件。我通过 VS 将 Microsoft.QualityTools.Testing.Fakes.dll 复制到此目录中,以便将其也添加到项目中。
    3. 需要添加/更新项目的 .csproj 文件中的提示路径以查看 Fakes 目录。我在我的 .csproj 文件中找到了引用并将其更改为如下所示:

<Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
    <HintPath>Fakes\Microsoft.QualityTools.Testing.Fakes.dll</HintPath>
</Reference>

现在一切都编译并运行单元测试

于 2013-07-31T17:19:36.197 回答
1

只能想到以下(如果已经设置,请道歉):

'测试' --> '测试设置' --> '默认处理器架构' --> 'X64'

于 2013-02-19T23:17:22.090 回答
0

不幸的是,我无法弄清楚如何让 Visual Studio 运行 fakes.exe 而不是 fakes.x86.exe。除了通过 fakes.x86.exe 复制 fakes.exe。不过,在四处寻找时,微软提出的一个关于使用假货来提高速度的建议是只引用创建的假货 dll 并确保所需的引用在您的测试项目中。默认情况下似乎是 Microsoft.VisualStudio.QualityTools.UnitTestFramework。这样做不仅可以让我使用假货,还可以减少构建时间,因为不再需要生成假货库。不是我最喜欢的解决方案,但它确实具有速度优势。所以我要走那条路。

感谢那些帮助解决这个问题的人。

回顾一下要编译的 4.5 版本...确保您的单元测试项目的成名版本是 4.5,如果从 4.0 更改它,请关闭并重新打开 Visual Studio。

于 2013-02-20T22:45:34.287 回答