无法在文本资源管理器中查看基于.net核心2的测试项目的测试用例

时间:2017-09-18 13:53:22

标签: nunit visual-studio-2017 nsubstitute asp.net-core-2.0 .net-core-2.0

我已经基于.Net Core 2创建了一个测试项目,并编写了一些NUnit测试用例。安装了必要的NuGet软件包,即NUnit3TestAdapter后,我能够在“测试资源管理器”中查看所有测试用例,并能够执行这些测试用例。现在,当我查看项目目录时,我发现它正在创建“obj”文件夹和一些json文件。所以我试图通过修改“.csproj”文件来改变“obj”文件夹的路径。我在参数“BaseIntermediateOutputPath”中提供了一些不同的路径,这样,我就可以摆脱“obj”文件夹了。提供不同路径的原因是,我想将json文件与源代码分开。 但是,在修改之后我无法从Test Explorer中看到或执行任何测试用例。 这是微软的错误吗? 是否所有包都依赖于“obj”文件夹?

P.S。 我正在为我的测试项目使用“NUnit”和“NSubstitute”软件包。

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

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <OutputPath>..\..\build\$(Configuration)\UnitTests\</OutputPath>
    <BaseIntermediateOutputPath>..\..\work\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
  </PropertyGroup>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <ItemGroup>
    <PackageReference Include="Castle.Core" Version="4.1.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
    <PackageReference Include="NSubstitute" Version="2.0.3" />
    <PackageReference Include="NUnit" Version="3.8.1" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.8.0" />
  </ItemGroup>

  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
  <ItemGroup>
    <ProjectReference Include="..\UtilityLibrary\UtilityLibrary.csproj" />
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:1)

当.NET Core项目构建时,它们不会将所有引用的文件复制到bin文件夹中。将Microsoft.NET.Test.Sdk添加到测试项目时,其中之一就是添加AssemblyResolve event handler,从searchDirectories列表中加载其他相关程序集。

BaseIntermediateOutputPath无法正常工作reported against the VSTest project并且是MSBuild的问题。 workaround is noted in the dotnet sdk repositoryenter image description here。因此,您需要在Sdk中使用csproj导入,而不是Sdk元素上的Project属性。

<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>obj\XXX\</BaseIntermediateOutputPath>    
  </PropertyGroup>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <!-- Body of project -->

  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>