【问题标题】:UnitTestIsolationException: Throws Exception while running Shims test in Release/Debug modeUnitTestIsolationException:在发布/调试模式下运行 Shims 测试时引发异常
【发布时间】:2013-05-15 21:55:59
【问题描述】:

我正在尝试使用 Microsoft Shims 运行此单元测试,但它在 Shims.Context.Create(); 方法中引发了异常。

环境: VS 2012,Win2K8 R2

namespace MyShimsUnitTest
{
    [TestClass]
    public class MyUnitTest
    {
        [TestMethod]
        public void GetCurrentYear()
        {
            using (Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create())
            {
                // Some Logic...
            }
        }

    }
}

详细异常:

Result Message: 
Test method MyShimsUnitTest.MyUnitTest.GetCurrentYear threw exception: 
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException: UnitTestIsolation instrumentation failed to initialize. Please restart Visual Studio and rerun this test
Result StackTrace:  
at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentationProvider()
   at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.CreateContext()
   at Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()
   at MyShimsUnitTest.MyUnitTest.GetCurrentYear()

【问题讨论】:

  • 您能否确认您已按照建议操作(重新启动 Visual Studio)
  • @DaveRook:是的,我已经重新启动了我的 VS,但没有运气。
  • @skumar:你用哪个测试运行器来运行上面的测试?
  • @skumar -- 如果你要去create a tag wiki 和copy the text verbatim from another source without attribution,那就是抄袭,会被标记为抄袭。 请在创建标签wiki时注明来源。
  • @LittleBobbyTables:感谢您的反馈。我会牢记并在未来遵循它。再次感谢。

标签: c# unit-testing microsoft-fakes


【解决方案1】:

这可能是由于没有使用 vs 2012 的测试资源管理器造成的。要使用 shim,您应该只使用测试资源管理器运行测试。

如果为 vs 2012 安装适当的测试运行程序,您可以使用其他测试框架,例如 Nunit 或 Xunit 与 shim。它可以从 vs 扩展管理器下载。

【讨论】:

    【解决方案2】:

    垫片需要由 IntelliTrace 分析器执行运行时检测。测试运行程序负责设置 CLR 加载分析器所需的环境变量,并提供分析器必须为 Shims 检测的类型列表。当 ShimRuntime 无法定位并附加到 IntelliTrace 分析器(它预期已由 CLR 加载)时,将引发 UnitTestIsolationException。

    正如 Jin-Wook 之前提到的,当测试由未执行所需分析器初始化的运行器执行时,会出现此问题。测试资源管理器和 vstest.console.exe 是 Visual Studio 2012 附带的两个这样的运行程序。此时,在“旧”模式下运行测试时,Visual Studio 测试运行程序不会执行所需的分析器检测,当您有为您的运行选择的 .TESTSETTINGS 文件或强制使用旧模式的 .RUNSETTINGS 文件。

    您可以使用支持 Shims 所需的分析器检测的第三方测试运行器。

    【讨论】:

    • 在 VS2015 中,我不得不关闭 IntelliTrace 设置下的“IntelliTrace 事件和调用信息”选项,否则调试时会出现此异常。
    【解决方案3】:

    我们看到我们的构建服务器 Bamboo 报告了这个错误。它正在调用 MSbuild 4.0 任务。单元测试在开发人员的本地 PC 上运行良好。我删除了这个竹子任务并创建了一个调用 Visual Studio 2012 的 vstest.console 的新任务。测试现在通过了,但 Bamboo 无法计算测试的数量。这是竹子的问题,不是我的。

    【讨论】:

    • 要让它在竹子上工作,你必须在服务器上安装 VS Ultimate 吗?
    • 不,它是 Premium 2012
    【解决方案4】:

    我有同样的问题。我的问题的解决方案是从菜单中取消选中选定的 .testsettings 文件:TEST/Test Settings 和此处的 Select Test Settings File 上方的项目。

    【讨论】:

    • 已经关闭本机代码调试,这解决了问题
    【解决方案5】:

    我也遇到过这个问题。谢天谢地,这里的其他答案帮助我解决了我的问题:

    我正在使用 Resharper,在使用上下文菜单时,我注意到跑步者正在使用 MSTest。即使在测试资源管理器中找到测试并选择调试,我也收到了同样的异常。

    然后我进入 Resharpers 的选项并在 Tools -> Unit Testing -> MsTest 下取消选中“启用 MSTest 支持”。不幸的是,这禁用了右键单击您的测试并点击运行/调试的选项,但它确实允许ShimsContext.Create() 在从测试资源管理器视图中选择调试时正确运行!

    【讨论】:

      【解决方案6】:

      转到您的 TestProject 属性 -> 在 Debug 部分下选中“ENABLE NATIVE CODE DEBUGGING”复选框。

      这是应该做的。

      【讨论】:

      • 非常感谢,您的回答帮助我克服了异常。
      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多