Azure Devops UniTest не находит файл ".deps. json" - PullRequest
0 голосов
/ 27 марта 2020

Я создал основной проект webapi asp. net и создал соответствующий ему xUnitTest. Когда я запускаю UnitTest на своем локальном компьютере, UnitTest запускается без проблем. Я использую XUnit с его бегунком visualstudio. Вот ссылки на мой проект UnitTest:

<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="Moq" Version="4.13.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.assert" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.core" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />

Когда я сейчас запускаю юнит-тест через Azure Devops, они успешно работают и дают мне следующий вывод:

Created test run: 156
Publishing test results: 35
Publishing test results to test run '156'.
TestResults To Publish 35, Test run id:156
Test results publishing 35, remaining: 0. Test run id: 156
Published test results: 35
Publishing Attachments: 2
Failed tests: 0; Total tests: 35;

у меня проблема в том, что позже я получаю исключение, что файл ". deps. json" не был найден :

Unable to find d:\a\1\s\<project-path>\obj\Release\netcoreapp3.1\<project>.deps.json. Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk".

Затем я проверил, могу ли я искать бинарная папка, но тогда тестовый проект не найден. Я также попытался использовать задачу "DotNetCoreCLI@2" и задачу "VSTest@2", обе они вызывают одну и ту же проблему. Вот файл yaml, который я использую:

# UnitTests
- task: VSBuild@1
    inputs:
    solution: '**/<projectnamespace>.UnitTests.csproj'
    vsVersion: 16.0  #also tried without this line
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: DotNetCoreCLI@2
    inputs:
    command: test
    projects: '**UnitTests.dll'
    arguments: '--configuration $(buildConfiguration)'

- task: VSTest@2
    inputs:
    testSelector: testAssemblies
    testAssemblyVer2: '**bin\**UnitTests*.dll'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
    codeCoverageEnabled: true

Оба тестовых задания запустят тест, а затем "не пройдут", поскольку файл ".deps. json" не найден.

1 Ответ

1 голос
/ 30 марта 2020

Было две проблемы с этой проблемой:

  1. Найденный модульный тест был расположен в папке " / obj / release ", но в этой папке нет * .deps . json файлы скопированы. В задаче сборки вы можете видеть, что * .deps. json были успешно собраны и скопированы:

Копирование файла из "d: \ a \ 1 \ s \ APPNAME \ bin \ Release \ netcoreapp3.1 \ APPNAME.deps. json "в" d: \ a \ 1 \ s ... "

Вторая проблема, с которой я столкнулся, заключалась в том, что ссылка в модульном тесте ссылалась на. NET Стандартное решение 2.1, которое, по-видимому, не включает * .deps. json в выходные данные.

Вот мой фиксированный файл yaml:

# UnitTests
- task: VSBuild@1
  displayName: 'Build Test'
  inputs:
    solution: '**/APPNAME.UnitTests.csproj'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.ArtifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    testSelector: testAssemblies
    testAssemblyVer2: 'APPNAME\bin\Release\netcoreapp3.1\APPNAME.UnitTests.dll' #Full path to test dll
    testFiltercriteria: FullyQualifiedName~APPNAME.UnitTests # Further namespace filter
    runInParallel: false
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    diagnosticsEnabled: true
...