【问题标题】:Unit Tests that use ShimContext.Create() getting error on Azure DevOps Pipeline使用 ShimContext.Create() 的单元测试在 Azure DevOps Pipeline 上出现错误
【发布时间】:2019-11-18 15:02:28
【问题描述】:

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

错误信息:

测试方法 MyTestMehodName 抛出异常: Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:SetDetourProvider 在探查器库“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\IntelliTrace\Microsoft. IntelliTrace.Profiler.dll'。

堆栈跟踪:

在 Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.IntelliTraceInstrumentationProvider.Initialize() 在 Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentationProvider() 在 Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.CreateContext() 在 Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create() 在 MySolutuionPath.MyTestMehodName() 在 \ProjectTestName\TestFileName.cs:line 115

当我将新的 TestSetting 文件添加到解决方案并启用 IntelliTrace 选项时,我能够在 Visual Studio IDE 上重现此错误: Adding Test setting file to solution

构建服务器的配置:

  • Windows Server 2019 数据中心

  • Visual Studio Enterprise 2017 版本 15.9.17

这是我的测试方法

[TestMethod]
public void MyTestMethodName()
{
      using (ShimsContext.Create())
      {
          // Unit Test goes here with Assert
      }
}

这是管道的样子: Pipeline 这是 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?还是 VSTS?如果在 VSTS 中运行,它使用了哪个代理?托管还是私有?和哪种类型?根据我的经验,这个问题似乎只有在测试使用垫片时才会发生。你在脚本中使用了 Fake 吗?
  • VSTS。私人自托管代理。我不确定我是否在脚本中使用了 Fake,这是什么意思?
  • 我的意思是假框架。你能更新简单的样本让我重现吗?不确定,但认为这似乎是我们这边的已知问题。您能否更新一下,以便我更清楚地了解这一点?
  • 非常感谢您分享的脚本。已经拿到了这些脚本,会在我这边进行测试,并尽快给你结果。为安全起见,请删除此源链接。
  • 抱歉延迟回复。我已经尝试过我身边的回购并与我的同事讨论过。如果我在 VS 中启用 IntelliTrace,我们可以重现相同的问题。但是,无论我使用托管代理还是私有代理,它都在 Azure Devops 上取得了成功。如果您使用托管代理,是否可以重现此错误?你可以试试,让我知道结果。此外,您是否将运行设置或测试设置文件存储在 VSTS 存储库中?而且,你有没有检查过它的内容?在您分享给我的文件中,我没有看到这样的文件。我们认为这与单元测试更相关。

标签: c# unit-testing visual-studio-2017 azure-devops azure-pipelines


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多