'dotnet test' не находит тесты nunit в конвейере gitlab-runner

У меня есть решение с NUnit тестпроект (Foo.Test).

+-- src
|   +-- Foo.Gui
|   +-- Foo.Test
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="TestResults\**" />
    <EmbeddedResource Remove="TestResults\**" />
    <None Remove="TestResults\**" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="GitVersionTask" Version="5.1.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="nunit" Version="3.12.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Foo.Gui\Foo.Gui.csproj" />
  </ItemGroup>

</Project>

Для тестирования используется следующий вызов:

dotnet test --no-build -c Release -v n src\%TESTPROJECT%\%TESTPROJECT%.csproj --logger "trx;LogFileName=testreport.trx"

Если я запускаю его локально, все работает, как ожидалось:

Тот же вызов на сервере сборки не находит никаких тестов:

gitlab-ci.yml

test:solution:
    stage: test
    script:
        - dotnet test --no-build -c Release -v n src\$env:TESTPROJECT\$env:TESTPROJECT.csproj --logger "trx;LogFileName=testreport.trx"
    after_script:
        - trx2junit src\$env:TESTPROJECT\Testresults\testreport.trx 
    artifacts:
        reports:
            junit: src\$env:TESTPROJECT\Testresults\testreport.xml

Кто-то подсказал, что может быть не так? Testproject (Foo.Test.dll) доступен и присутствует в артефактах сборки.

1 ответ

Решение

Мне пришлось добавить дополнительный dotnet restore в конвейере сборки перед тестированием, чтобы восстановить project.assets.json. Теперь все работает как положено

test:solution:
    stage: test
    script:
        - dotnet restore src
        - dotnet test --no-build -c Release -v n src\$env:TESTPROJECT\$env:TESTPROJECT.csproj --logger "trx;LogFileName=testreport.trx"
    after_script:
        - trx2junit src\$env:TESTPROJECT\Testresults\testreport.trx 
    artifacts:
        reports:
            junit: src\$env:TESTPROJECT\Testresults\testreport.xml

Другие вопросы по тегам