【问题标题】:NUnit TestRunner working directory is different depending on target framework of projectNUnit TestRunner 工作目录因项目的目标框架而异
【发布时间】:2018-10-03 16:52:40
【问题描述】:

我正在开发一个在解决方案中有一个测试项目的库。该库使用 .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>

这是工作项目文件

<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>

有人知道更多关于这种行为的信息吗?我该如何解决这个问题?

【问题讨论】:

  • 这种行为似乎是设计使然。请查看此问题以了解如何解决它:github.com/nunit/nunit/issues/1072
  • 好的,谢谢,但我仍然想知道为什么这种行为不适用于 .NET Core 项目?

标签: c# .net nunit


【解决方案1】:

正如引用的问题中所解释的,NUnit 根本不会更改当前工作目录。这是设计使然,基于库程序永远不应更改 cd 而应保持调用程序设置的概念。

对于 .NET Core 项目,运行程序或 Visual Studio 本身更改目录可能是有原因的。我不知道它们是什么,但我知道 NUnit 不这样做。

显而易见的解决方法是在您的测试中使用TestContext.TestDirectory。它是由 NUnit 提供的。请注意,它适用于测试代码。如果你在测试代码之外需要类似的东西,你可以从TestContext.TestDirectory 复制逻辑,这已经很好地测试了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多