首页 > 解决方案 > 用于 TestContext.DeploymentDirectory 的 Azure 管道单元测试 Uri 导致失败

问题描述

我有一个 Azure DevOps 构建,它正在执行一套单元测试。测试在本地通过,但由于使用TestContext.DeploymentDirectory的测试失败,Hosted 2017 代理上的构建失败。

失败的测试使用TestContext. 模拟OutputPath设置的 设置为该TestContext.DeploymentDirectory值。然后将模拟设置对象传递给构造函数,并使用Assert.AreEqual如图所示的结果对象进行检查;

[TestMethod]
public void Test_DiskStorageManager()
{
  var settings = new MockDataHandlerSettings(TestContext);
  var manager = new DiskStorageManager(settings);

  Assert.AreEqual(settings.OutputPath, manager.OutputPath);
}

在构造函数中是以下内容;

if (Uri.TryCreate(settings.OutputPath, UriKind.Absolute, out Uri outputUri))
{
  OutputPath = outputUri.LocalPath;
  IsLocalOutput = outputUri.IsLoopback;
}
else
{
  throw new ArgumentException($"Output path is invalid {settings.OutputPath}");
}

测试在本地运行良好,但在托管代理上发生以下测试失败;

Assert.AreEqual failed. 
Expected:<D:\a_temp..\Tests\TestResults\TestResults\Deploy_VssAdministrator 2020-03-10 03_09_31\Out>. 
Actual:<D:\a\Tests\TestResults\TestResults\Deploy_VssAdministrator 2020-03-10 03_09_31\Out>.

是什么导致从D:\a_temp..\to的变化D:\a\并使测试失败?

编辑

测试任务由以下 YAML 定义;

variables:
  BuildConfiguration: 'debug'
  BuildPlatform: 'any cpu'

steps:
- task: VSTest@2
  displayName: 'Test Assemblies'
  inputs:
    testAssemblyVer2: |
     **\$(BuildConfiguration)\**\*Tests.dll
     !**\obj\**
    runSettingsFile: '$/MyProject/Tests/.runsettings'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

.runsettings包含_

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <RunConfiguration>
        <MaxCpuCount>1</MaxCpuCount>
        <ResultsDirectory>..\Tests\TestResults</ResultsDirectory>
        <TargetPlatform>x64</TargetPlatform>
    </RunConfiguration>
  <DeploymentEnabled>True</DeploymentEnabled>
</RunSettings>

标签: c#azure-pipelinesmstest

解决方案


由于.runsettings 文件的 ResultsDirectory 元素中的相对路径,测试失败。测试初始化​​为;

TestResultsDirectory intialized to D:\a\_temp\..\Tests\TestResults\TestResults

删除<ResultsDirectory>..\Tests\TestResults</ResultsDirectory>

TestResultsDirectory intialized to d:\a\_temp\TestResults

注意:失败测试中显示的预期值未正确转义\. 显示值为 ,D:\a_temp..\Tests但任务日志中的失败消息为D:\a\_temp\..\Tests

这并不能解释为什么在 VS2019 16.4 中完全解析了相对路径,而不是在 Azure 管道中。


推荐阅读