这是什么库以及为什么需要它
xUnit 和 NUnit 是 .NET 生态系统(C#、F#、VB.NET)中最流行的两个单元测试库。它们允许开发人员编写自动测试,以验证程序各个模块(类、方法、函数)的正确性。
为什么需要它?
- 早期发现错误: 每次代码更改后都会运行测试,从而可以立即发现回归问题(新代码破坏旧功能)。
- 无惧重构: 如果您确信测试覆盖了代码,就可以放心地重写代码。如果测试通过,一切照常运行。
- 活文档: 测试展示了某个方法应如何使用、它接受哪些参数以及返回什么结果。
- CI/CD 集成: 在部署之前,测试会在构建服务器(GitHub Actions、Azure DevOps、Jenkins)上自动运行。
xUnit 和 NUnit 的区别:
- NUnit — 较老的库(从 Java JUnit 移植而来),使用
[Test]、[SetUp]、[TearDown]等属性。拥有丰富的参数化测试属性集。 - xUnit — 较现代的库,由 NUnit 的作者创建。使用
[Fact]属性进行常规测试,使用[Theory]进行参数化测试。其测试隔离方法更为严格(每个测试都是类的新实例)。
在本文中,我们将介绍这两个库,但主要关注 xUnit,因为微软推荐在新项目中使用它。
安装
通过 NuGet 包管理器进行安装。您可以使用包管理器控制台或 .NET CLI。
安装 xUnit
// 通过 .NET CLIdotnet add package xunitdotnet add package xunit.runner.visualstudio
// 通过包管理器控制台Install-Package xunitInstall-Package xunit.runner.visualstudio安装 NUnit
// 通过 .NET CLIdotnet add package NUnitdotnet add package NUnit3TestAdapter
// 通过包管理器控制台Install-Package NUnitInstall-Package NUnit3TestAdapter重要提示: 要在 Visual Studio 或 Rider 中运行测试,还需要安装测试运行器适配器(例如 xunit.runner.visualstudio 或 NUnit3TestAdapter)。
快速入门及代码示例
假设我们有一个简单的 Calculator 类,其中包含 Add 方法。让我们为它编写 xUnit 和 NUnit 测试。
被测试的类 (Calculator.cs)
public class Calculator{ public int Add(int a, int b) { return a + b; }
public int Divide(int a, int b) { if (b == 0) throw new DivideByZeroException("不能除以零!"); return a / b; }}xUnit 测试 (CalculatorTests.cs)
using Xunit;
public class CalculatorTests{ [Fact] public void Add_ShouldReturnSum_WhenTwoPositiveNumbers() { // Arrange (准备) var calculator = new Calculator(); int a = 5; int b = 3;
// Act (操作) int result = calculator.Add(a, b);
// Assert (断言) Assert.Equal(8, result); }
[Fact] public void Divide_ShouldThrowException_WhenDivideByZero() { var calculator = new Calculator();
Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0)); }}