实现.NET Core时,xUnit可用于创建单元测试,.NET Core团队使用了该产品。xUnit是一个开源实现方案,创建NUnit 2.0的开发人员创建了它。现在,.NET Core命令行界面支持MSTest和xUnit。
提示:
xUnit的文档可参阅https://xunit.github.io/。
Visual Studio测试环境支持其他测试框架。测试适配器,如NUnit、xUnit、Boost(用于C++)、Chutzpah(用于JavaScript)和Jasmine(用于JavaScript)可通过扩展和更新来使用;这些测试适配器与Visual Studio Test Explorer集成。
xUnit是.NET Core中一个杰出的测试框架,也由微软的.NET Core和ASP .NET Core开源代码使用,所以xUnit是本节的重点。
1. 使用xUnit和.NET Core
使用.NET Core应用程序,可以创建xUnit测试,其方式与MSTest测试类似。从命令行,可以使用:
> dotnet new xunit
创建xUnit测试项目。在Visual Studio 2017中,可以选择项目类型xUnit Test Project(.NET Core)。
在示例项目中,测试与以前相同的.NET 标准库UnitTestingSamples。这个库包含之前所示的测试的类型:DeepThought和StringSample。测试项目的名称是UnitTestingSamples.xUnit.Tests。
这个项目需要引用xunit(对于单元测试,是xunit.runner.visualstudio[在Visual Studio中运行测试])和UnitTestingSamples项目(应测试的代码)。为了与.NET Core命令行集成,添加dotnet-xunit的DotNetCliToolReference:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\UniTestingSamples\UniTestingSamples.csproj" />
</ItemGroup>
</Project>
2. 创建Fact属性
创建测试的方式非常类似于之前的方法。在MSTest中,需要给测试类型添加特性注释([TestClass])。但在xUnit中是不必要的。因为会在所有的公共类中搜索测试方法。在xUnit和MSTest中测试方法TheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything的差异只是测试方法带Fact特性注释和不同的Assert.Equal方法:
public class DeepThoughtTest
{
[Fact]
public void ResultOfTheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()
{
int expected = 42;
var dt = new DeepThought();
int actual = dt.TheAnswerOfTheUlt