如何让NUnit3TestAdapter与.Net Standard 2.0一起使用?

Sco*_*rod 25 nunit .net-standard

如何让NUnit3TestAdapter与.Net Standard 2.0一起使用?

我收到以下错误:

1> C:\ Nikeza\Mobile\Nikeza.Mobile\Tests\ExampleBased.fsproj:

警告NU1701:使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETStandard,Version = v2.0'恢复了包"NUnit3TestAdapter 3.9.0".

此软件包可能与您的项目不完全兼容.1> ExampleBased - > C:\ Nikeza\Mobile\Nikeza.Mobile\Tests\bin\Debug \netstandard2.0\ExampleBased.dll

Rob*_*use 26

您没有提供足够的信息来诊断项目文件的错误,但它的3.9.0版NUnit适配器可以与.NET Standard 2.0和F#一起使用.我认为您的测试项目针对的是.NET Standard.它需要以.NET Core或.NET 4.6.1+为目标.测试项目被视为可执行文件,它们需要针对特定​​框架,而不是.NET标准.您正在测试的代码可以是.NET Standard.

您应该按照文档单元使用dotnet test和NUnit测试.NET Core中的F#库,并阅读NUnit文档,.NET Core和.NET Standard.

你的项目文件应该是这样的,

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>

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

  <ItemGroup>
    <Compile Include="Tests.fs" />
    <Compile Include="Program.fs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
    <PackageReference Include="NUnit" Version="3.9.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\MathService\MathService.fsproj" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

  • `netcoreapp2.0`是必需的,因为这是.NET团队设计它的方式.他们决定您必须通过这种方式编译测试来决定要运行测试的平台.他们可能已经基于命令行选项将.NET Standard测试加载到特定于平台的运行程序中,但他们没有.如果他们这样做,您将始终必须指定要在其下运行的平台.这样,如果您单独定位测试,他们就会知道.您可以将其视为控制台应用程序,无法创建或运行.NET标准控制台应用程序,您必须指定目标. (4认同)
  • 为什么需要`netcoreapp2.0`?我希望 `netstandard2.0` 足以满足一个带有测试的库。显然我误解了,但请帮助我。 (2认同)
  • @JoshMonreal,您需要做的就是将单元测试库创建为 .NET Core 库,而不是 .NET Standard 库。这只是 .NET Standard 中测试的工作方式,而不是 NUnit、xUnit 等问题。 (2认同)