Как определить несколько шаблонов соответствия в AzureDevOps Pipeline VSTest @ 2?

В настоящее время я пытаюсь настроить новый конвейер для нашего решения и не могу заставить Visual Studio Test найти правильный набор тестов в моем решении. Либо он выбирает 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 Studio\2019\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" @d:\a\_temp\66884a11-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\1\s\Tests\Api\FirstController.Tests\bin\Release\netcoreapp2.1\FirstController.Tests.dll"
 "d:\a\1\s\Tests\Api\SecondController.Tests\bin\Release\netcoreapp2.1\SecondController.Tests.dll"
 "d:\a\1\s\Tests\CreateTranslateStringsFromDeviceConfigurationSettings\bin\Release\netcoreapp2.1\CreateTranslateStringsFromDeviceConfigurationSettings.dll"
 "d:\a\1\s\Tests\Api\FourthController.Tests\bin\Release\netcoreapp2.1\FourthController.Tests.dll"
 "d:\a\1\s\Tests\Api\FifthController.Tests\bin\Release\netcoreapp2.1\FifthController.Tests.dll"
 /Settings:"d:\a\_temp\69a604d0-77b3-11e9-b7cb-25533524cce5.runsettings"
 /EnableCodeCoverage
 /logger:"trx"
 /TestAdapterPath:"d:\a\1\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\**.

В выводе вы можете видеть, что список тестовых сборок не разделен запятыми, что указывает на то, что значение не понято правильно и, следовательно, может привести к пустому списку.

Поэтому мы пытаемся просто скопировать и вставить значения запятых из первого запущенного вывода, который дает следующую конфигурацию и (неудачный) вывод:

    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\**.

Теперь результат совпадает с первым, но он по-прежнему не работает. Так что использование запятых - не лучший вариант.

Итак, в четвертом случае я взял значение из документация, которая

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\**.

Итак, как правильно определить несколько паттернов?


person Oliver    schedule 16.05.2019    source источник


Ответы (1)


Попробуй это:

- task: VSTest@2
  inputs:
    testAssemblyVer2: |
     **\*test.dll
     !**\*TestAdapter.dll
     !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
person Shayki Abramczyk    schedule 16.05.2019
comment
Да, это работает. Кажется, это ошибка, если первый шаблон находится в той же строке, что и имя свойства. Также Microsoft должна принять документацию для этого. - person Oliver; 16.05.2019
comment
Да, похоже на ошибку. Спасибо за отчет! - person Shayki Abramczyk; 16.05.2019
comment
Спасибо, это помогло мне разобраться, почему не находят мою тестовую сборку. MS нужна лучшая документация или примеры по этому поводу. - person Sharbel; 19.12.2019