2013-02-19 60 views
6

我正在使用Microsoft Fakes测试框架。由于我无法改变“遗留”代码,因此我需要使用填充/痣方法,因此没有多少解决方法。这是来自供应商的代码,没有源代码,它的编写没有考虑到测试。所以我坚持3种可能的框架,TypeMock(昂贵的),Telerik的JustMock(昂贵的)或微软的Fakes。因为我们已经有VS Ultimate,所以我们选择了假货。由于大多数人认为他们需要建议以某种方式重写或修改代码以支持使用接口和/或依赖注入,所以我会先告诉您,这不是一种选择。微软伪造的x64不是x86和v4.5

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

第二个问题是我需要使用v4.5框架来编译假货库。尽管没有文档,但可以通过命令行。原因是在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 

help命令只能说明V2,V3.5和V4是TFV可能的选择,但只是踢我尝试v4.5。

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

+0

你甚至肯定有一个64位版本的fakes.exe? – 2013-02-19 23:10:42

+0

是的,您可以使用我展示的命令手动运行它。 32位是fakes.x86.exe。 – Edward 2013-02-20 00:05:53

+0

我能够通过将单元测试项目设置为4.5并关闭解决方案并重新打开它来获得v4.5的工作。不知道为什么我必须关闭视觉工作室...不幸的是,它并没有解决32/64位问题。 – Edward 2013-02-20 00:07:26

回答

1

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

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

+0

已设置。试过x64和任何CPU。没有不同。 – Edward 2013-02-20 00:04:47

+0

改变项目中的体系结构没有什么区别,我只是尝试了测试设置,没有任何改变。 – Edward 2013-02-20 00:10:40

0

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

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

重新获得4.5版本的编译...确保单元测试项目的名称版本是4.5,如果从4.0更改它,关闭并重新打开Visual Studio。

+2

是否有任何文档说明如何“引用已创建的假冒DLL并确保所需的引用在您的测试项目中”? – schellack 2013-06-14 20:54:55

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. 我发现Microsoft.QualityTools.Testing.Fakes.dll在C:\ Program Files文件(x86)的\微软的Visual Studio 11.0 \ Common7 \ IDE \ PublicAssemblies
    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> 

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