我正在使用 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 的版本更改也更改了程序集引用。如果我能找到它,我的下一个尝试是尝试更改模板项目。