Рабочий каталог NUnit TestRunner отличается в зависимости от целевой структуры проекта - PullRequest
0 голосов
/ 03 октября 2018

Я занимаюсь разработкой библиотеки, в которой есть тестовый проект в решении.Библиотека использует несколько фреймворков из .NET-юниверса (например, net462 или netcoreapp2.0) и отлично работает.В настоящее время тестовый проект использует netcoreapp2.1 и последнюю платформу NUnit и программу запуска тестов.

У меня есть тесты, основанные на файлах, которые включены в тестовый проект и копируются в выходную папку в процессе сборки.Когда тестовый проект использует .NET Core в качестве целевой платформы, файлы обнаруживаются и тесты проходят.Когда в тестовом проекте используется что-то еще, кроме .NET Core (я не тестировал все версии .NET Framework, но некоторые из них), файлы не найдены и тесты не пройдены.

Когда не используется .NET Core,рабочий каталог тестового бегуна, кажется, расположен в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\, который не является выходным каталогом проекта.

Это не рабочий файл проекта

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <OutputPath>bin\Release\</OutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
   <OutputPath>bin\Debug\</OutputPath>
  </PropertyGroup>

    <PropertyGroup>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
    <PackageReference Include="NUnit" Version="3.10.1" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
  </ItemGroup>
</Project>

И это рабочий проектfile

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <OutputPath>bin\Release\</OutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
   <OutputPath>bin\Debug\</OutputPath>
  </PropertyGroup>

    <PropertyGroup>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
    <PackageReference Include="NUnit" Version="3.10.1" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
  </ItemGroup>
</Project>

Кто-нибудь знает больше об этом поведении?Как мне это исправить?

1 Ответ

0 голосов
/ 03 октября 2018

Как объяснено в упомянутой проблеме, NUnit вообще не меняет текущий рабочий каталог.Это сделано специально, исходя из того, что библиотечные программы никогда не должны изменять компакт-диск, но должны оставлять его как установлено вызывающей программой.

Могут быть причины, по которым бегунок или Visual Studio сами изменяют каталог вслучай проекта .NET Core.Я не знаю, что это такое, но я знаю, что NUnit этого не делает.

Очевидный обходной путь - использовать TestContext.TestDirectory в своих тестах.Это предусмотрено NUnit для этой цели.Обратите внимание, что только работает в тестовом коде.Если вам нужно что-то подобное за пределами тестового кода, вы можете скопировать логику из TestContext.TestDirectory, которая достаточно хорошо протестирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...