在C#项目开发中,单元测试可以提前发现代码逻辑问题,减少后期调试成本,xUnit和NUnit是两款使用最广泛的C#测试框架,下面分别介绍它们的使用方法。

一、xUnit框架使用教程
1. 环境准备
首先创建一个普通的C#类库项目作为待测试项目,比如创建一个Calculator类,包含加法方法:
// 待测试的计算器类
public class Calculator
{
// 加法方法
public int Add(int a, int b)
{
return a + b;
}
}
然后新建一个xUnit测试项目,通过NuGet安装xunit和xunit.runner.visualstudio包,安装完成后即可编写测试用例。
2. 编写xUnit测试用例
xUnit中使用[Fact]标记无参数的测试方法,使用[Theory]配合[InlineData]标记带参数的测试方法,示例如下:
using Xunit;
using 待测试项目命名空间;
public class CalculatorTests
{
private readonly Calculator _calculator;
// 构造函数,初始化测试对象
public CalculatorTests()
{
_calculator = new Calculator();
}
// 无参数测试用例
[Fact]
public void Add_TwoPositiveNumbers_ReturnsCorrectSum()
{
// 准备数据
int a = 1;
int b = 2;
// 执行方法
int result = _calculator.Add(a, b);
// 断言结果
Assert.Equal(3, result);
}
// 带参数的测试用例
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-1, 5, 4)]
[InlineData(0, 0, 0)]
public void Add_MultipleData_ReturnsCorrectSum(int a, int b, int expected)
{
int result = _calculator.Add(a, b);
Assert.Equal(expected, result);
}
}
3. 运行测试
在Visual Studio的测试资源管理器中可以直接看到所有测试用例,点击运行即可查看测试结果,绿色表示通过,红色表示失败。
二、NUnit框架使用教程
1. 环境准备
同样先准备好待测试的Calculator类,然后新建NUnit测试项目,通过NuGet安装NUnit和NUnit3TestAdapter包,完成环境配置。
2. 编写NUnit测试用例
NUnit使用[Test]标记测试方法,[TestCase]标记带参数的测试场景,还支持[SetUp]标记每个测试前执行的方法,示例如下:
using NUnit.Framework;
using 待测试项目命名空间;
[TestFixture]
public class CalculatorTests
{
private Calculator _calculator;
// 每个测试方法执行前都会运行该方法
[SetUp]
public void Setup()
{
_calculator = new Calculator();
}
// 基础测试用例
[Test]
public void Add_TwoPositiveNumbers_ReturnsCorrectSum()
{
int a = 1;
int b = 2;
int result = _calculator.Add(a, b);
Assert.AreEqual(3, result);
}
// 多参数测试用例
[TestCase(1, 2, 3)]
[TestCase(-1, 5, 4)]
[TestCase(0, 0, 0)]
public void Add_MultipleData_ReturnsCorrectSum(int a, int b, int expected)
{
int result = _calculator.Add(a, b);
Assert.AreEqual(expected, result);
}
}
3. 运行测试
和xUnit类似,在测试资源管理器中可以运行所有NUnit测试用例,查看执行结果和失败原因。
三、xUnit和NUnit的差异对比
两个框架的核心功能类似,但在部分特性和使用习惯上有区别,具体对比如下:
| 对比项 | xUnit | NUnit |
|---|---|---|
| 测试类标记 | 无需额外标记 | 需要添加[TestFixture] |
| 无参测试方法标记 | [Fact] | [Test] |
| 带参测试方法标记 | [Theory]+[InlineData] | [TestCase] |
| 初始化方法标记 | 使用构造函数 | [SetUp] |
| 断言方法 | Assert.Equal等 | Assert.AreEqual等 |
四、实战选择建议
如果是新项目,xUnit的语法更简洁,和.NET Core生态兼容性更好,推荐优先选择;如果是维护旧项目,且项目原本使用NUnit,建议继续使用NUnit保持一致性。两种框架都能满足日常单元测试需求,开发者可以根据团队习惯和项目情况灵活选择。