【发布时间】: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