微软假装x64而不是x86和v4.5

时间:2013-02-19 23:04:07

标签: c# unit-testing visual-studio-2012 microsoft-fakes

我正在使用Microsoft Fakes测试框架。由于我无法改变的“遗留”代码,我需要使用垫片/鼹鼠方法,因此没有多少方法。它是来自没有源代码的供应商的代码,它是在没有测试的情况下编写的。所以我坚持使用3种可能的框架,TypeMock(昂贵的),Telerik的JustMock(昂贵的)或微软的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时,我们将手动重新创建它并更新引用。此文件不会经常更新,因此这是可能的。

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

"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文件中查找测试,没有变化。 在.csproj文件中看到fakes.exe,它说使用框架的v4,在visual studio中打开,改为v4.5,编译得很好。使用fakes命令行,编译好了。 项目中的.fakes文件中有一个属性允许定义编译器版本,但是将其设置为v4.5仍然不起作用。我假设Visual Studio中从v4到v4.5的版本更改也改变了程序集引用。我的下一个尝试是尝试更改模板项目,如果我能找到它。

3 个答案:

答案 0 :(得分:4)

@schellack - 以下是我能够“引用创建的假货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
    2. 中找到了Microsoft.QualityTools.Testing.Fakes.dll
    3. 在项目的主目录中,与.csproj文件相同的位置,有一个“Fakes”目录,它包含在项目中(在VS中可见)以及源代码管理下。它有一个.fakes文件。我通过VS将Microsoft.QualityTools.Testing.Fakes.dll复制到此目录中,以便将其添加到项目中。
    4. 需要添加/更新项目的.csproj文件中的提示路径以查看Fakes目录。我在.csproj文件中找到了引用并将其更改为如下所示:
  4. <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>
    

    现在所有编译和单元测试都会运行

答案 1 :(得分:1)

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

'测试' - &gt; '测试设置' - &gt; '默认处理器架构' - &gt; 'X64'

答案 2 :(得分:0)

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

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

回顾一下4.5版本的编译...确保单元测试项目的famework版本是4.5,如果从4.0更改它,关闭并重新打开visual studio。