Microsoft.假货不会在正常的单元测试上下文中运行
本文关键字:单元测试 上下文 运行 Microsoft | 更新日期: 2023-09-27 18:35:22
我正在使用一个简单的概念验证Fakes nUnit测试:
[Test]
public void TestFakes()
{
using (var ctx = ShimsContext.Create())
{
System.Fakes.ShimDateTime.NowGet = () => { return new DateTime(2000, 1, 1); };
Assert.That(DateTime.Now.Year, Is.EqualTo(2000));
}
}
此测试在 Visual Studio 测试资源管理器中运行,但不在以下位置运行:
- n单位图形用户界面
- n单元控制台
- JetBrains 测试运行器(dotCover OR Resharper)
- TestDriven.net 测试运行程序
在每一个中,我都收到以下错误:
Microsoft.质量工具.测试.假货.单元测试隔离.单元测试隔离异常:无法解析来自COR_PROFILER_PATH和COR_PROFILER环境变量的探查器路径
当我反映到该程序集时,它似乎正在寻找 Intellitrace,这是仅限 VS Ultimate 的功能 - 我只安装了高级版。
关于如何解决此问题的任何建议(我们在构建服务器上使用 nUnit 运行器,因此这是使用 Fakes 的障碍)
我认为您将无法使用 MS 测试框架以外的任何东西执行基于 MS Fakes 的测试。
我相信 MS Fakes 的工作方式会给 NUnit 等测试运行者带来问题。我不知道为什么会这样,因为其他模拟框架(例如 TypeMock)在 NUnit 等中工作正常。但是 MS Fakes 有一些特定的功能,这使得使用 MS Test 以外的任何东西运行变得更加困难(如果不是不可能的话)。无论如何,这是我的理论。
除非NUnit,xUnit等的作者添加对MS Fakes的支持(或者有一个狡猾的解决方法),否则我认为您将不得不坚持使用MS Test。
编辑:
看起来最新版本的NCrunch v2.5确实适用于MS Fakes。我在开发过程中尝试了测试版,并且可以确认 MS Fake 测试是使用 NCrunch 执行
Fakes 仅适用于 Visual Studio Test Runner(AKA VStest.Console.exe)。即使是以前的 Microsoft MSTest 运行器也不支持它。
我相信您的答案是使用以下命令之一:
VSTest.Console.exe UnitTests.dll /UseVsixExtensions
VSTest.Console.exe UnitTests.dll /TestAdapterPath:%LocalAppData%'Microsoft'VisualStudio'12.0'Extensions'<nunit test adapter installation folder>
这些命令将在开发计算机上正常运行。如果要在生成服务器上运行单元测试,请将 nunit test 适配器文件夹复制到生成服务器并提及该路径。