C# 使用ShimContext.Create()的单元测试在Azure DevOps管道上获取错误

C# 使用ShimContext.Create()的单元测试在Azure DevOps管道上获取错误,c#,unit-testing,visual-studio-2017,azure-devops,azure-pipelines,C#,Unit Testing,Visual Studio 2017,Azure Devops,Azure Pipelines,我有一些单元测试使用了伪代码和上下文。 当它们在Visual Studio Enterprise 2017 IDE上运行时,它们成功运行,但是,当单元测试在管道上运行时,它们抛出以下错误: 错误消息: 测试方法MyTestMehodName引发异常: Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:探查器库“C:\Program Files(x86)\Microsoft Visua

我有一些单元测试使用了伪代码和上下文。 当它们在Visual Studio Enterprise 2017 IDE上运行时,它们成功运行,但是,当单元测试在管道上运行时,它们抛出以下错误:

错误消息:

测试方法MyTestMehodName引发异常: Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:探查器库“C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\IntelliTrace\Microsoft.IntelliTrace.profiler.dll”中的SetDetourProvider返回意外错误

堆栈跟踪:

在Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.IntelliTraceInstrumentProvider.Initialize()中 在Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentProvider()中 在Microsoft.QualityTools.Testing.Fakes.Shimmers.ShimRuntime.CreateContext()中 在Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()上 在\ProjectTestName\TestFileName.cs中的mysolutionuionpath.MyTestMehodName()处:第115行

当我向解决方案添加新的TestSetting文件并启用IntelliTrace选项时,我能够在Visual Studio IDE上重现此错误:

生成服务器的配置:

  • Windows Server 2019数据中心

  • Visual Studio Enterprise 2017版本15.9.17

这是我的测试方法

[TestMethod]
public void MyTestMethodName()
{
      using (ShimsContext.Create())
      {
          // Unit Test goes here with Assert
      }
}
这是管道的外观: 这是YAML配置

steps:
 - task: VSTest@2
  displayName: 'Run Unit Tests'
  inputs:
    testAssemblyVer2: |
     **\*test*.dll
     !**\*TestAdapter.dll
     !**\obj\**
     !**\*QualityTools.UnitTestFramework.dll
     !**\*QualityTools.Testing.Fakes.dll
    searchFolder: '$(Build.BinariesDirectory)'
    vsTestVersion: toolsInstaller
    runInParallel: true
    runTestsInIsolation: false
    codeCoverageEnabled: false
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
  continueOnError: true
我尝试过的解决方案:

  • 添加.runsettings文件以启用/禁用IntelliTrace
  • 将管道中的“测试平台版本”更改为Visual Studio 2015/2017
  • 启用和禁用“隔离运行测试”选项
  • 启用和禁用“代码覆盖率启用”选项

我想知道我是否错过了构建服务器上的任何安装。但是,如果单元测试在IDE(测试资源管理器)中成功运行,我假设我缺少任何东西。

根据,您可以尝试将生成代理服务更改为以普通特权用户而不是系统/本地用户身份登录。

您使用的是哪台服务器?TFS?还是VST?如果在VSTS中运行,则使用哪个代理?寄宿还是隐居?哪种类型?根据我的经验,只有在测试使用垫片时才会出现此问题。你在脚本中使用了假的吗?VSTS。私人自托管代理。我真的不确定我的剧本中是否使用了赝品,你这是什么意思?我指的是赝品框架。你能用简单的样品更新一下吗?不确定,但我认为这似乎是我们方面已知的问题。你能不能更新一下,让我更清楚地了解这一点?非常感谢分享你的脚本。有了这些脚本,我会在我这边测试它,并尽快给你结果。为了安全起见,请删除此源链接。很抱歉延迟回复。我尝试过回购协议,并与我的同事进行了讨论。如果我在VS中启用IntelliTrace,我们可以重现同样的问题。但是,无论我使用的是Hosted agent还是private agent,它都在Azure Devops上成功。如果使用Hosted agent,是否可以复制此错误?你可以试着告诉我结果。此外,您是否在VSTS repos中存储了runsetting或testsetting文件?你有没有检查过它的内容?我在您共享给我的文件中没有看到这样的文件。我们认为这与单元测试更相关。