Azure devops Azure Devops管道测试步骤失败-数据文件路径不正确
我有一份包含三种解决方案的回购协议。每个解决方案都有多个项目,其中许多项目是共享的(包括测试项目) 我有一个沿着以下线路的构建管道Azure devops Azure Devops管道测试步骤失败-数据文件路径不正确,azure-devops,azure-pipelines,azure-pipelines-tasks,Azure Devops,Azure Pipelines,Azure Pipelines Tasks,我有一份包含三种解决方案的回购协议。每个解决方案都有多个项目,其中许多项目是共享的(包括测试项目) 我有一个沿着以下线路的构建管道 检索NuGet包 构建解决方案1 构建解决方案2 构建解决方案3 执行所有测试 执行所有测试的步骤如下: - task: VSTest@2 displayName: 'Test' inputs: testSelector: 'testAssemblies' testAssemblyVer2: | **\*test*.dll
- 检索NuGet包
- 构建解决方案1
- 构建解决方案2
- 构建解决方案3
- 执行所有测试
- task: VSTest@2
displayName: 'Test'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'
private const string RelativePath = @"..\..\A\B\TestData\";
...
var x = File.ReadAllText(RelativePath + "SomeFile.txt")
绝大多数测试都运行良好。然而,对于一些测试,我得到了奇怪且相当混乱的错误消息:
[错误]测试夹具TestProjectOne.A.B.GetSomethingTests的安装失败
[错误]安装程序:System.IO.DirectoryNotFoundException:找不到路径的一部分
'd:\a\1\s\Projects\TestProjectTwo\a\B\TestData\SomeFile.txt'
因此,它目前正在处理TestProjectOne,但随后表示在TestProjectTwo的路径下找不到文件
测试中的代码如下所示:
- task: VSTest@2
displayName: 'Test'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*test*.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'
private const string RelativePath = @"..\..\A\B\TestData\";
...
var x = File.ReadAllText(RelativePath + "SomeFile.txt")
不用说,使用VisualStudio2019并使用VisualStudio和ReSharper测试运行程序,这一点非常有效
为什么Azure DevOps管道会遇到这个问题
为什么Azure DevOps管道会遇到这个问题
这是因为我们在VS测试任务中使用了通配符:
- task: VSTest@2
displayName: 'Test'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*test*.dll
它将获取$(System.DefaultWorkingDirectory)
文件夹中的所有*test*.dll
文件,包括子文件夹
显然,这种方法带来的巨大便利是,我们不必从文件夹中逐个抓取*test*.dll
但它的一个问题是,由于我们使用通配符,它将丢失每个*test*.dll
文件的完整路径。在这种情况下,如果我们在*test*.dll
文件中指定相对路径。\..\A\B\TestData\
,它将无法获得正确的路径,因为当前的*test*.dll
文件丢失了其完整路径
这就是为什么它从TestProjectOne.A.B.GetSomethingTests
执行测试dll,但从TestProjectTwo
获取路径的原因
为了解决这个问题,我们可以在*test*.dll
文件中指定完整路径,而不是相对路径
希望这能有所帮助。另外一点信息是,我对所有14个测试项目都使用了一个任务。对于属性
testAssemblyVer2
I,我添加了每个DLL的路径,并用管道分隔符分隔。我花了一些时间才找到正确的路径,但它如下:a\B.Test\bin\Release\B.Test.dll