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