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

pat*_*ter 20 c# visual-studio microsoft-fakes

我正在使用一个简单的概念证明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));
      }
  }
Run Code Online (Sandbox Code Playgroud)

此测试在Visual Studio测试资源管理器中运行,但不在以下位置运行:

  • nUnit GUI
  • nUnit控制台
  • JetBrains测试跑步者(dotCover OR Resharper)
  • TestDriven.net测试运行器

在每个中,我收到以下错误:

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

当我反思这个程序集时,似乎它正在寻找仅限VS Ultimate的Intellitrace功能 - 我只安装了Premium.

有关如何解决此问题的任何建议(我们在构建服务器上使用nUnit runner,因此这是使用Fakes的阻止程序)

Jas*_*ans 14

我不认为您将能够使用MS Test框架之外的任何其他任何东西来执行基于MS Fakes的测试.

我相信MS Fakes的工作方式会给NUnit等测试跑步者带来问题.正是这种情况的原因,我不知道,因为其他模拟框架如TypeMock在NUnit中运行良好等等.但是MS Fakes有一些特定的东西使得它更难(如果不是不可能的话)与其他任何东西一起运行MS测试.无论如何,那是我的理论.

除非NUnit,xUnit等的作者添加对MS Fakes的支持(或者有一个狡猾的解决方法),否则我认为你必须坚持使用MS Test.

编辑:

看起来NCrunch v2.5 的最新版本与MS Fakes一起使用.我在开发期间尝试了测试版,并且可以确认使用NCrunch毫无疑问地执行了MS Fake测试.

  • 我已经接受了你的回答(谢谢:-)并找到了原因:[当过程开始时,垫片需要特殊的仪器.没有这个工具,所有试图填充任何方法或属性都会抛出ShimNotSupportedException.在Update 2中,我们向前移动了检测检查,以便在创建ShimsContext时发生.我们进行了此更改以简化Shims检测问题的故障排除以及它们可能产生的ShimNotSupportedException.](http://connect.microsoft.com/VisualStudio/feedback/details/785411/cannot-debug-unit-tests-with-shims-在-vs2012-W-UPDATE2) (4认同)

MiF*_*vil 5

Fakes仅适用于Visual Studio Test Runner(AKA VStest.Console.exe).甚至以前的Microsoft MSTest跑步者也不支持它.