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

最佳答案

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

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

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

关于c# - UnitTestIsolationException : Throws Exception while running Shims test in Release/Debug mode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16664814/

10-11 01:53