Azure DevOps 管道:在本地通过的测试在管道上失败
Azure DevOps Pipeline: Tests that pass locally fail on the pipeline
我们的团队正在尝试实施 Azure DevOps 管道,但我们遇到了一些问题。作为背景,我们 运行 在我们的自托管 windows 服务器上进行测试。我们对所有工作进行了前端测试,但现在我们在让后端通过方面遇到了问题。
虽然大多数测试都很好地通过了,但在一些情况下它没有按预期工作。尽管他们应该能够并行 运行,但我将其关闭以验证这不是问题所在。我也尝试过 运行 隔离它们,没有任何明显的变化。
我们得到的错误只是简单的断言失败,就像下面的错误,没有给我们提供太多信息。
Error Message:
Assert.AreEqual failed. Expected:<True>. Actual:<False>.
但是行号指向一个模拟设置,就像下面那个我不明白的那样。
mockQueryHandler.Setup(x => x.Handle(It.IsAny<FindQuery>())).Returns(info);
目前给我们带来最多问题的测试 class 是测试我们的事件警报功能的测试。似乎第一个测试会通过,但随后的测试会失败。但是,我们将管道设置为重新 运行 任何失败的测试三次,直到它放弃。所以在每个 re运行 上,下一个测试都会通过。我唯一能想到的是我们的自动模拟由于某种原因给我们带来了麻烦。我们按照
我们模拟如下:
var IAbstractEventFactoryMock = new Mock<IAbstractEventFactory>();
using (var mock = AutoMock.GetLoose(builder => builder.RegisterInstance(IAbstractEventFactoryMock.Object).Keyed<IAbstractEventFactory>("EventLogFactory").Keyed<IAbstractEventFactory>("ArpEventLogFactory"))) {
...
}
下面是我们的.运行设置文件
<RunSettings>
<RunConfiguration>
<ResultsDirectory>.\TestResults</ResultsDirectory>
</RunConfiguration>
<MSTest>
</MSTest>
</RunSettings>
下面是我们用来 运行 测试的 YAML
steps:
- task: VSTest@2
displayName: 'Run All Tests'
inputs:
testAssemblyVer2: |
**\*ID_Test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)/ID_Test'
runSettingsFile: 'ID_Test/.runsettings'
runInParallel: false
runTestsInIsolation: true
codeCoverageEnabled: false
testRunTitle: 'Unit Tests'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
continueOnError: true
同样,这些测试都在本地毫无问题地通过了,如果我在管道上 运行 它们足够多次,它们最终会通过。所以我不认为问题出在代码本身。似乎没有正确设置或清理测试。我主要是在寻找有关配置 yaml 或 运行 设置的其他方法的任何想法,以尝试解决此问题。在此先感谢您的帮助,如果我可以提供任何其他信息来帮助您,请告诉我。
您可以使用 Visual Studio Test Platform Installer
任务来 运行 测试,而无需完全 Visual Studio 安装。您可以尝试在 VSTest
任务和 select 适当版本之前添加此任务。然后在VSTest
任务中,选择Test platform version
下的Installed by Tools Installer
:
原来这只是我们测试的问题。在一些地方,我们会使用当前时间,这在本地很好,但服务器的执行时间要长得多,这会产生一些错误。在执行时间与 运行 本地测试相似的代理上测试管道帮助我发现这不是管道的问题。
我们的团队正在尝试实施 Azure DevOps 管道,但我们遇到了一些问题。作为背景,我们 运行 在我们的自托管 windows 服务器上进行测试。我们对所有工作进行了前端测试,但现在我们在让后端通过方面遇到了问题。
虽然大多数测试都很好地通过了,但在一些情况下它没有按预期工作。尽管他们应该能够并行 运行,但我将其关闭以验证这不是问题所在。我也尝试过 运行 隔离它们,没有任何明显的变化。
我们得到的错误只是简单的断言失败,就像下面的错误,没有给我们提供太多信息。
Error Message:
Assert.AreEqual failed. Expected:<True>. Actual:<False>.
但是行号指向一个模拟设置,就像下面那个我不明白的那样。
mockQueryHandler.Setup(x => x.Handle(It.IsAny<FindQuery>())).Returns(info);
目前给我们带来最多问题的测试 class 是测试我们的事件警报功能的测试。似乎第一个测试会通过,但随后的测试会失败。但是,我们将管道设置为重新 运行 任何失败的测试三次,直到它放弃。所以在每个 re运行 上,下一个测试都会通过。我唯一能想到的是我们的自动模拟由于某种原因给我们带来了麻烦。我们按照
我们模拟如下:
var IAbstractEventFactoryMock = new Mock<IAbstractEventFactory>();
using (var mock = AutoMock.GetLoose(builder => builder.RegisterInstance(IAbstractEventFactoryMock.Object).Keyed<IAbstractEventFactory>("EventLogFactory").Keyed<IAbstractEventFactory>("ArpEventLogFactory"))) {
...
}
下面是我们的.运行设置文件
<RunSettings>
<RunConfiguration>
<ResultsDirectory>.\TestResults</ResultsDirectory>
</RunConfiguration>
<MSTest>
</MSTest>
</RunSettings>
下面是我们用来 运行 测试的 YAML
steps:
- task: VSTest@2
displayName: 'Run All Tests'
inputs:
testAssemblyVer2: |
**\*ID_Test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)/ID_Test'
runSettingsFile: 'ID_Test/.runsettings'
runInParallel: false
runTestsInIsolation: true
codeCoverageEnabled: false
testRunTitle: 'Unit Tests'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
diagnosticsEnabled: true
rerunFailedTests: true
continueOnError: true
同样,这些测试都在本地毫无问题地通过了,如果我在管道上 运行 它们足够多次,它们最终会通过。所以我不认为问题出在代码本身。似乎没有正确设置或清理测试。我主要是在寻找有关配置 yaml 或 运行 设置的其他方法的任何想法,以尝试解决此问题。在此先感谢您的帮助,如果我可以提供任何其他信息来帮助您,请告诉我。
您可以使用 Visual Studio Test Platform Installer
任务来 运行 测试,而无需完全 Visual Studio 安装。您可以尝试在 VSTest
任务和 select 适当版本之前添加此任务。然后在VSTest
任务中,选择Test platform version
下的Installed by Tools Installer
:
原来这只是我们测试的问题。在一些地方,我们会使用当前时间,这在本地很好,但服务器的执行时间要长得多,这会产生一些错误。在执行时间与 运行 本地测试相似的代理上测试管道帮助我发现这不是管道的问题。