我正在使用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版本更改也改变了程序集引用。我的下一个尝试是尝试和更改模板项目,如果我能找到它。
你甚至肯定有一个64位版本的fakes.exe? – 2013-02-19 23:10:42
是的,您可以使用我展示的命令手动运行它。 32位是fakes.x86.exe。 – Edward 2013-02-20 00:05:53
我能够通过将单元测试项目设置为4.5并关闭解决方案并重新打开它来获得v4.5的工作。不知道为什么我必须关闭视觉工作室...不幸的是,它并没有解决32/64位问题。 – Edward 2013-02-20 00:07:26