3

我正在尝试使用 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()
4

6 回答 6

7

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

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

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

于 2013-06-14T14:55:33.620 回答
4

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

于 2014-01-19T14:28:18.410 回答
2

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

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

于 2013-05-21T12:12:52.327 回答
2

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

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

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

于 2014-01-31T17:22:32.733 回答
1

转到您的 TestProject Properties -> Under Debug 部分选中“ENABLE NATIVE CODE DEBUGGING”复选框。

这是应该做的。 快照

于 2014-08-11T09:55:25.457 回答
0

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

于 2013-12-12T18:51:54.453 回答