如何在 AzureDevOps Pipeline VSTest@2 中定义多个匹配模式?
How to define multiple matching patterns in AzureDevOps Pipeline VSTest@2?
目前我正在尝试为我们的解决方案设置一个新的管道,但无法获得 Visual Studio 测试以在我的解决方案中找到正确的测试集。它要么选择一个不包含任何测试的 DLL(这会导致任务失败),要么如果我指定 testAssemblyVer2
属性 它会发出一条警告,指出它找不到任何程序集测试。
我们正在使用的基本任务配置:
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
searchFolder: '$(System.DefaultWorkingDirectory)'
runInParallel: true
codeCoverageEnabled: true
diagnosticsEnabled: true
如果我们运行这个,我们可以在输出中看到如下配置(部分):
...
Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**
...
======================================================
[command]"C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" @d:\a\_temp884a11-77b3-11e9-b7cb-25533524cce5.txt
Microsoft (R) Test Execution Command Line Tool Version 16.0.1
Copyright (c) Microsoft Corporation. All rights reserved.
"d:\a\s\Tests\Api\FirstController.Tests\bin\Release\netcoreapp2.1\FirstController.Tests.dll"
"d:\a\s\Tests\Api\SecondController.Tests\bin\Release\netcoreapp2.1\SecondController.Tests.dll"
"d:\a\s\Tests\CreateTranslateStringsFromDeviceConfigurationSettings\bin\Release\netcoreapp2.1\CreateTranslateStringsFromDeviceConfigurationSettings.dll"
"d:\a\s\Tests\Api\FourthController.Tests\bin\Release\netcoreapp2.1\FourthController.Tests.dll"
"d:\a\s\Tests\Api\FifthController.Tests\bin\Release\netcoreapp2.1\FifthController.Tests.dll"
/Settings:"d:\a\_tempa604d0-77b3-11e9-b7cb-25533524cce5.runsettings"
/EnableCodeCoverage
/logger:"trx"
/TestAdapterPath:"d:\a\s"
Starting test execution, please wait...
如您所见,有一个程序集 CreateTranslateStringsFromDeviceConfigurationSettings
不包含任何测试,但被选为测试候选者。我从我的具体解决方案中获取了确切的原始名称,只是为了表明它显然与模式不匹配但被选中了。现在我们尝试通过定义我们自己的匹配模式来避免这个问题。
如果我们通过助手创建任务,默认会添加如下值:
testAssemblyVer2: '**\*test*.dll
!**\*TestAdapter.dll
!**\obj\**'
如果我们运行这我们得到以下输出:
...
Test assemblies : **\*test*.dll !**\*TestAdapter.dll !**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**.
在输出中您可以看到,测试程序集列表不是逗号分隔的,这表明该值未被正确理解,因此可能导致列表为空。
所以我们尝试简单地复制并粘贴第一个 运行ning 输出中的逗号值,这会产生以下配置和(失败的)输出:
testAssemblyVer2: '**\*test*.dll,!**\*TestAdapter.dll,!**\obj\**'
输出:
...
Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**.
现在输出与第一个匹配,但仍然无效。所以使用逗号似乎不是办法。
所以在第四种情况下,我从 the documentation 中获取了值,即
testAssemblyVer2: '**\*test*.dll!**\*TestAdapter.dll!**\obj\**'
但它也失败了,并出现类似的错误消息:
...
Test assemblies : **\*test*.dll!**\*TestAdapter.dll!**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll!**\*TestAdapter.dll!**\obj\**.
那么如何正确定义多个模式呢?
试试这个:
- task: VSTest@2
inputs:
testAssemblyVer2: |
**\*test.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'
目前我正在尝试为我们的解决方案设置一个新的管道,但无法获得 Visual Studio 测试以在我的解决方案中找到正确的测试集。它要么选择一个不包含任何测试的 DLL(这会导致任务失败),要么如果我指定 testAssemblyVer2
属性 它会发出一条警告,指出它找不到任何程序集测试。
我们正在使用的基本任务配置:
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
searchFolder: '$(System.DefaultWorkingDirectory)'
runInParallel: true
codeCoverageEnabled: true
diagnosticsEnabled: true
如果我们运行这个,我们可以在输出中看到如下配置(部分):
...
Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**
...
======================================================
[command]"C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" @d:\a\_temp884a11-77b3-11e9-b7cb-25533524cce5.txt
Microsoft (R) Test Execution Command Line Tool Version 16.0.1
Copyright (c) Microsoft Corporation. All rights reserved.
"d:\a\s\Tests\Api\FirstController.Tests\bin\Release\netcoreapp2.1\FirstController.Tests.dll"
"d:\a\s\Tests\Api\SecondController.Tests\bin\Release\netcoreapp2.1\SecondController.Tests.dll"
"d:\a\s\Tests\CreateTranslateStringsFromDeviceConfigurationSettings\bin\Release\netcoreapp2.1\CreateTranslateStringsFromDeviceConfigurationSettings.dll"
"d:\a\s\Tests\Api\FourthController.Tests\bin\Release\netcoreapp2.1\FourthController.Tests.dll"
"d:\a\s\Tests\Api\FifthController.Tests\bin\Release\netcoreapp2.1\FifthController.Tests.dll"
/Settings:"d:\a\_tempa604d0-77b3-11e9-b7cb-25533524cce5.runsettings"
/EnableCodeCoverage
/logger:"trx"
/TestAdapterPath:"d:\a\s"
Starting test execution, please wait...
如您所见,有一个程序集 CreateTranslateStringsFromDeviceConfigurationSettings
不包含任何测试,但被选为测试候选者。我从我的具体解决方案中获取了确切的原始名称,只是为了表明它显然与模式不匹配但被选中了。现在我们尝试通过定义我们自己的匹配模式来避免这个问题。
如果我们通过助手创建任务,默认会添加如下值:
testAssemblyVer2: '**\*test*.dll
!**\*TestAdapter.dll
!**\obj\**'
如果我们运行这我们得到以下输出:
...
Test assemblies : **\*test*.dll !**\*TestAdapter.dll !**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**.
在输出中您可以看到,测试程序集列表不是逗号分隔的,这表明该值未被正确理解,因此可能导致列表为空。
所以我们尝试简单地复制并粘贴第一个 运行ning 输出中的逗号值,这会产生以下配置和(失败的)输出:
testAssemblyVer2: '**\*test*.dll,!**\*TestAdapter.dll,!**\obj\**'
输出:
...
Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**.
现在输出与第一个匹配,但仍然无效。所以使用逗号似乎不是办法。
所以在第四种情况下,我从 the documentation 中获取了值,即
testAssemblyVer2: '**\*test*.dll!**\*TestAdapter.dll!**\obj\**'
但它也失败了,并出现类似的错误消息:
...
Test assemblies : **\*test*.dll!**\*TestAdapter.dll!**\obj\**
...
##[warning]No test assemblies found matching the pattern: **\*test*.dll!**\*TestAdapter.dll!**\obj\**.
那么如何正确定义多个模式呢?
试试这个:
- task: VSTest@2
inputs:
testAssemblyVer2: |
**\*test.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'