Azure URI тестового конвейера для TestContext.DeploymentDirectory вызывает сбой - PullRequest
3 голосов
/ 10 марта 2020

У меня есть Azure сборка DevOps, которая выполняет набор модульных тестов. Тесты проходят локально, но сборка на агенте Hosted 2017 завершается неудачно из-за неудачного теста, использующего TestContext.DeploymentDirectory .

В результате неудачного теста создается фиктивный объект настроек с использованием 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..\ на D:\a\ и приводит к сбою теста?

EDIT

Задача тестирования определяется следующим 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>

1 Ответ

0 голосов
/ 11 марта 2020

Тест не пройден из-за относительного пути в элементе ResultsDirectory файла .runsettings . Тесты инициализируются с помощью:

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 трубопровода.

...