Azure DevOps Pipeline: невозможно получить тесты для компиляции - PullRequest
0 голосов
/ 28 января 2020

У меня есть решение, содержащее 4 проекта (упрощенные имена)

  • MyApplication (. Net Standard 2.0)
  • MyApplication.Test.1 (. Net Core 3.1)
  • MyApplication.Test.2 (. Net Core 3.1)
  • MyApplication.Test.3 (. Net Core 3.1)

Папка решения содержит файл * .sln и по одной папке на проект (плюс материал для Git управления исходным кодом).

Каждый из трех тестовых проектов использует собственный пакет NuGet, "MyNugetPackage"; этот пакет существует в нашей среде Azure как артефакт. Они также используют NUnit3 - ссылки NuGet тестового проекта следующие:

<PackageReference Include="MyNugetPackage" Version="2020.1.1" />
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.16.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />

Я создал следующий файл YAML для нашего конвейера:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: release
  platform: x64

steps:
- task: NuGetToolInstaller@1
  inputs:
    versionSpec: 
    checkLatest: true

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'
    vstsFeed: '{GuidA}/{GuidB}'

- task: MSBuild@1
  inputs:
    solution: '**/*.sln'
    msbuildArchitecture: 'x64'
    platform: 'Any CPU'
    configuration: 'Release'
    msbuildArguments: '-m'
    clean: true

- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: '**/*Tests/*.csproj'
    arguments: '--configuration Release'

Первоначально это не удалось на этапе MSBuild До тех пор, пока я не выяснил, как настроить разрешения для извлечения из нашего Azure артефакта (свойство vstsFeed). После успешного выполнения шага MSBuild происходит сбой при выполнении шага DonNetCoreCLI (Test): я получаю несколько сообщений, подобных:

MyTestFile.cs (13,22): ошибка CS0234: имя типа или пространства имен «AB C» не существует в пространстве имен «MyNugetPackage» (отсутствует ссылка на сборку?) [d: \ a \ 1 \ s \ MyApplication.Test.1 \ MyApplication.Test.1. csproj]

Я предполагаю, что это означает, что тестовые проекты не могут найти наш личный 'MyNugetPackage'. Но как это могло случиться, когда MSBuild преуспел?

Я попытался поменять шаг MSBuild для сборки Visual Studio, но безрезультатно (опять-таки, шаг сборки сработал, шаг тестирования не удался):

- task: VSBuild@1
  inputs:
    solution: '**\*.sln'
    platform: 'any cpu'
    configuration: 'release'
    clean: true
    maximumCpuCount: true
    msbuildArchitecture: 'x64'

Затем я попытался поменять шаг MSBuild для. NET Базовая сборка, чтобы он соответствовал заданию для тестов

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration Release'

И теперь шаг BUILD завершился неудачей.

Итак мне кажется, что у меня есть два пути вперед:

  • Либо придерживайтесь либо MSBuild, либо Visual Studio Build, и определите, как затем выполнить мои тесты, либо
  • . успешно скомпилировать с DotNetcoreCLI@2 вместо использования MSBuild / Visual Studio Build и надеяться, что тесты будут работать так, как ожидалось

Документация от Microsoft казалась такой простой ( Запустите ваши тесты ) .... надеясь, что кто-нибудь поможет мне выбрать правильный путь.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Таким образом, решение, которое (в конечном итоге) сработало для меня, состояло в том, чтобы использовать . Net Core (DotNetCoreCLI@2) и разбивать каждый шаг на части, например,

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  platform: x64

steps:
- task: DotNetCoreCLI@2
  displayName: 'Restore for MyApplication'
  inputs:
    command: 'restore'
    projects: 'MyApplication/*.csproj'
    feedsToUse: 'select'
    vstsFeed: '{GuidA}/{GuidB}'

- task: DotNetCoreCLI@2
  displayName: 'Restore for MyApplication.Test.1'
  inputs:
    command: 'restore'
    projects: 'MyApplication.Test.1/*.csproj'
    feedsToUse: 'select'
    vstsFeed: '{GuidA}/{GuidB}'

- task: DotNetCoreCLI@2
  displayName: 'Restore for MyApplication.Test.2'
  inputs:
    command: 'restore'
    projects: 'MyApplication.Test.2/*.csproj'
    feedsToUse: 'select'
    vstsFeed: '{GuidA}/{GuidB}'

- task: DotNetCoreCLI@2
  displayName: 'Restore for MyApplication.Test.3'
  inputs:
    command: 'restore'
    projects: 'MyApplication.Test.3/*.csproj'
    feedsToUse: 'select'
    vstsFeed: '{GuidA}/{GuidB}'

- task: DotNetCoreCLI@2
  displayName: 'Build MyApplication'
  inputs:
    command: 'build'
    projects: 'MyApplication/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build Test.1'
  inputs:
    command: 'build'
    projects: 'MyApplication.Test.1/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build Test.2'
  inputs:
    command: 'build'
    projects: 'MyApplication.Test.2/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Build Test.3'
  inputs:
    command: 'build'
    projects: 'MyApplication.Test.3/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Execute Test.1s'
  inputs:
    command: 'test'
    projects: 'MyApplication.Test.1/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Execute Test.2s'
  inputs:
    command: 'test'
    projects: 'MyApplication.Test.2/*.csproj'

- task: DotNetCoreCLI@2
  displayName: 'Execute Test.3s'
  inputs:
    command: 'test'
    projects: 'MyApplication.Test.3/*.csproj'
0 голосов
/ 29 января 2020

Вы можете запустить команду dotnet test на своем локальном компьютере, чтобы проверить, работает ли она локально. Убедитесь, что вы можете успешно создавать и тестировать свои проекты локально.

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

- task: VSTest@2
  inputs:
    testAssemblyVer2: |
      **\*[Tt]est*.dll
      !**\*[Tt]estAdapter*.dll
      !**\obj\**
    searchFolder: $(system.defaultworkingdirectory)

    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

Вы также можете запустить Do tnet restore task to восстановить пакеты до dotnet test task

- task: DotNetCoreCLI@2
  displayName: 'dotnet restore'
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: select
    vstsFeed: 'nugettest'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...