Microsoft.Fakes无法在普通的单元测试环境中运行。

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测试资源管理器中运行,但无法在以下位置运行:

  • nUnit GUI
  • nUnit控制台
  • JetBrains测试运行器(dotCover或Resharper)
  • TestDriven.net测试运行器

在这些地方中,我会收到以下错误:

Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException: 无法从COR_PROFILER_PATH和COR_PROFILER环境变量解析分析器路径

当我反射该程序集时,似乎它正在寻找VS Ultimate独有的Intellitrace功能 - 我只安装了Premium版本。

有什么建议可以绕过这个问题吗(我们在构建服务器上使用nUnit runner,因此这是使用Fakes的障碍)?


2
你尝试设置环境变量了吗?似乎缺失了。 - Daniel Hilgarth
@DanielHilgarth 不行,因为我不知道我可以将其设置为什么(随意设置字符串也没有帮助,顺便说一下) - pattermeister
安装Visual Studio 2012 Update 2。这样,您就可以使用MS Fakes而无需拥有Ultimate版,Premium版就足够了。http://support.microsoft.com/kb/2797912 http://blogs.msdn.com/b/visualstudioalm/archive/2013/02/08/february-ctp-for-visual-studio-update-2.aspx#fakes - Jason Evans
@JasonEvans 发现得好!然而,我似乎正在运行2012 Update 3,这是(据说)所有先前更新的汇总。然而痛苦仍在持续。我可能会打开一个反馈项目给微软,以防这是一个错误。谢谢。 - pattermeister
3个回答

15

我认为除了MS Test框架,你将无法使用其他任何东西来执行基于MS Fakes的测试。

我认为MS Fakes的工作方式会导致对NUnit等测试运行程序造成问题。为什么会这样,我不知道,因为其他模拟框架(如TypeMock)在NUnit中运行良好。但是,有一些特定的东西使得MS Fakes难以(如果不是不可能)与除了MS Test以外的任何东西一起运行。这就是我的理论。

除非NUnit、xUnit等作者添加支持MS Fakes(或者有巧妙的解决方法),否则我认为你必须坚持使用MS Test。

编辑:

看起来最新版本的NCrunch v2.5可以使用MS Fakes。我在其开发期间尝试了该beta版,并确认MS Fakes测试能够成功地在NCrunch中执行。



5

Fakes只能与Visual Studio测试运行器(又名VStest.Console.exe)一起使用。即使是以前的Microsoft MSTest运行器也不支持它


1

我相信你的答案是使用以下命令之一:

VSTest.Console.exe UnitTests.dll /UseVsixExtensions

VSTest.Console.exe UnitTests.dll /TestAdapterPath:%LocalAppData%\Microsoft\VisualStudio\12.0\Extensions\<nunit test adapter installation folder>

这些命令在开发机器上运行良好。如果您想在构建服务器上运行单元测试,请将nunit测试适配器文件夹复制到构建服务器并提及该路径。

1
哈哈,我开玩笑了 :) 在我的情况下,这是完美的答案。只是想多加一点爱。 - Michael Krauklis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接