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 的障碍)

Microsoft.假货不会在正常的单元测试上下文中运行

我认为您将无法使用 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 适配器文件夹复制到生成服务器并提及该路径。