C# 8.0&.NET Core 3.0单元测试
关于《C# 8.0 And .NET Core 3.0 Modern Cross-Platform Development》第四章单元测试功能
关键字:C# 8.0, .NET Core 3.0,Modern Cross-Platform Development, Chapter 4 , Writing, Debugging, and Testing Functions
测试驱动开发
修复代码中的错误非常昂贵。 在开发过程中发现漏洞的时间越早,修复的成本就越低。
单元测试是在开发过程的早期发现错误的好方法。 一些开发人员甚至遵循以下原则:程序员在编写代码之前应该创建单元测试,这被称为测试驱动开发(TDD)。
更多信息:您可以通过以下链接了解有关TDD的更多信息: https://en.wikipedia.org/wiki/Test-driven_development
创建需要测试的类库
首先,我们将创建一个需要测试的功能。
- 在Chapter04文件夹中,创建两个名为CalculatorLib和CalculatorLibUnitTests的子文件夹,并将它们分别添加到工作区中。
- 导航到终端| > 新终端并选择CalculatorLib
- 在TERMINAL中输入以下命令:
dotnet new classlib
- 将名为Class1.cs的文件重命名为Calculator.cs。
- 修改该文件以定义Calculator类(带有故意的错误!),如以下代码所示:
namespace Packt
{
public class Calculator
{
public double Add(double a, double b)
{
return a * b;
}
}
}
- 在TERMINAL中输入以下命令:
dotnet build
- 导航到终端| 新建终端,然后选择CalculatorLibUnitTests。
- 在TERMINAL中输入以下命令:
dotnet new xunit
- 单击名为CalculatorLibUnitTests.csproj的文件,然后修改配置以添加一个项目组,该项目组具有对CalculatorLib项目的项目引用:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.0.1" />
</ItemGroup>
# 关键部分
<ItemGroup>
<ProjectReference Include="..CalculatorLibCalculatorLib.csproj" />
</ItemGroup>
</Project>
更多信息:您可以通过以下链接查看Microsoft的NuGet源,以获取最新的Microsoft.NET.Test.Sdk和其他软件包: https://www.nuget.org/packages/Microsoft.NET.Test.Sdk
- 将文件UnitTest1.cs重命名为CalculatorUnitTests.cs。
- 在TERMINAL中输入以下命令:
dotnet build
编写单元测试
编写良好的单元测试将包含三个部分:
- 安排:这部分将声明和实例化输入和输出的变量。
- 行动:这部分将执行您要测试的单元。 在我们的例子中,这意味着调用我们要测试的方法。
- 断言:这部分将对输出进行一个或多个断言。 断言是一种信念,即如果不是true则表示测试失败。 例如,当将2和2相加时,我们期望结果为4。
现在,我们将为Calculator类编写单元测试。
- 打开CalculatorUnitTests.cs,将类重命名为CalculatorUnitTests,导入Packt命名空间,然后对其进行修改,使其具有两个用于添加2和2以及添加2和3的测试方法,如以下代码所示:
using Packt;
using System;
using Xunit;
namespace CalculatorLibUnitTests
{
public class CalculatorUnitTests
{
[Fact]
public void TestAdding2And2()
{
// arrange
double a = 2;
double b = 2;
double expected = 4;
var calc = new Calculator();
// act
double actual = calc.Add(a, b);
// assert
Assert.Equal(expected, actual);
}
[Fact]
public void TestAdding2And3()
{
// arrange
double a = 2;
double b = 3;
double expected = 5;
var calc = new Calculator();
// act
double actual = calc.Add(a, b);
// assert
Assert.Equal(expected, actual);
}
}
}
- 运行单元测试
现在我们准备运行单元测试并查看结果。
- 在CalculatorLibUnitTest TERMINAL窗口中,输入以下命令:
dotnet test
- 请注意,结果表明运行了两个测试,一个测试通过了,一个测试失败了,如以下屏幕快照所示:
- 修复Add方法中的错误。
- 再次运行单元测试,以查看该错误现已修复。
- 关闭工作区。