c# - 用于 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>
解决方案
由于.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 管道中。
推荐阅读
- python - Keras sequential NaN values for Loss and val_loss
- printing - I need help printing the percentage on top of the barplot columns. I have the barplot the way I want it. I just cannot get percentages to print ontop
- laravel - Format array output to be readable by chartjs in Laravel
- apache-kafka - 如何为 Kafka 主题实现生存时间 (TTL)
- icloud - Retrieving iCloud Note Tables Through Web Service But Table Cells Are Out Of Order In The Response
- excel - VBA 索引并与动态工作簿名称匹配
- django - Django:从 Channels 消费者查询数据库
- python - 创建线条动画的其他方法
- ios - 无法从 Swift 中的 Firestore 获取文档
- matlab - 在matlab中绘制单自由度图的自由振动响应