如何使用Rider或VS 2017中的NUnit,xUnit或MSTest测试.NET Standard 2库?

Say*_*ndo 7 .net c# unit-testing azure-functions .net-standard

我有一个项目,我使用Azure Durable Functions,它们仅在.NET Standard 2上可用.因此,它定义了哪些类库可用于测试项目.但是,我无法组合一个库,其中xUnit,NUnit或MSTest用于单元/集成测试.

将NUnit添加到.NET Standard 2为类库的项目失败,并显示以下错误:

信息:为C:\ VSTS\github.com \netstandardXunitMsTestNunit\src\Netstandard2xUnitMsTestnUnit \nunit \nunit.csproj恢复包... DEBUG:恢复.NETStandard的包,版本= v2.0 ... DEBUG:解决冲突. NETStandard,Version = v2.0 ...错误:检测到周期.nunit - > NUnit(> = 3.9.0).DEBUG:检查.NETStandard上的软件包兼容性,版本= v2.0.DEBUG:使用.NETStandard检查nunit 1.0.0的兼容性,版本= v2.0.

xUnit的错误是相同的(只是关于xUnit循环的错误消息).

这两个错误也可以在Rider和Visual Studio 2017 Enterprise中重现.我清理nuget缓存后再次尝试了.结果是一样的.

对于MsTest,可以添加ms测试库,但测试发现既不适用于Rider也不适用于Visual Studio.

甚至可以对.NET Standard 2库进行单元测试吗?

除了等待这些项目获取.NET Standard 2之外,我还能做些什么吗?

我创建了一个小样本项目,可以在这里找到:https://github.com/SayusiAndo/netstandard2xunitresharper

谢谢你的帮助!

Nig*_*888 15

没有运行的.NET标准,所以它不会执行你的测试.

您的测试程序集必须以可执行平台为目标,例如.NET Framework或.NET Core的版本.

<TargetFramework>net470</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

要么

<TargetFramework>netcoreapp2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅在不同框架上运行.NET Standard二进制文件.


Fei*_*hou 7

.NET Standard 是一种规范,每个 .NET Standard 版本(例如 .NET Framework、.NET Core 和 Xamarin)都定义了所有 .NET 实现必须提供的 API 集以符合该版本。您的库的 TargetFramework 值为 netstandard2.0,这意味着您不仅可以从 .NET Core 应用程序引用逻辑库,还可以从为 .NET Framework 或 Xamarin 构建的应用程序引用逻辑库。

但是,您无法为其构建应用程序,只能构建库。这是关于 .NET StandardMSDN 文档

因此,如果要测试库,则需要指定库支持的目标。如果你想支持多个 .NET 版本,那么你应该测试它们以确保你的库可以在这些目标上正确运行。这是目标框架的配置.csproj

单一目标:

<TargetFramework>net461</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

多个目标:

<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)


小智 5

  1. 如果您的类库将由面向 .Net Framework 4.6.1 的应用程序使用,则在以 .Net Framework 4.6.1 为目标的同一解决方案中创建一个新的单元测试项目,以便您使用相同的框架组合进行测试。
  2. 在单元测试项目中的references 下添加对类库项目的引用。
  3. 将 xUnit 和 xUnit.runner.visualstudio nuget 包添加到单元测试项目。
  4. 将单元测试类重命名为相关内容,并将 using MSTest 指令替换为 using XUnit。
  5. 开始编写和运行测试。(构建/重新构建解决方案,以便它为每个新测试更新测试资源管理器中的测试列表)。