У меня есть 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>