目录
写在前面
xUnit.net 是 NUnit 的作者Jim Newkirk搞的一个新的单元测试框架,目的是解决 NUnit 存在的一些问题和缺点,并在框架中加入一些最佳实践和扩展能力。
主要的改进点如下:
为每个测试方法产生一个对象实例
取消了 [SetUp] 和 [TearDown]
取消了 [ExpectedException]
类似于 Aspect 的功能
减少了自定义属性(Attribute)的数目
采用泛型
匿名委托
可扩展的断言
可扩展的测试方法
可扩展的测试类
总的来说用起来是比NUnit要简便了。
操作步骤
在目标类库的父目录下建立一个空的文件夹,命名为xUnitTester.Tests,进入该目录用命令行窗口执行:
dotnet new xunit
修改测试类代码:
cs
using NUnitTester;
using System.Linq.Expressions;
namespace xUnitTester.Tests;
public class UnitTest1
{
private readonly DataChecker _dataChecker;
public UnitTest1()
{
_dataChecker = new DataChecker();
}
/// <summary>
/// 表示当前是测试方法 标记的测试方法不能有方法参数
/// </summary>
[Fact]
public void Test1()
{
var result = _dataChecker.AddInt(1, 2);
Assert.Equal(3, result);
}
/// <summary>
/// 定义数据来源
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="expression"></param>
[Theory]
[InlineData(1, 2, 3)]
[InlineData(4, 2, 6)]
[InlineData(5, 2, 7)]
[InlineData(6, 2, 8)]
public void Test2(int x, int y, int expression)
{
var result = _dataChecker.AddInt(x, y);
Assert.Equal(expression, result);
}
}
目标类 DataChecker.cs 与前面的两篇中一样,这边也顺手贴一下
cs
public class DataChecker
{
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return true;
}
return false;
}
public int AddInt(int first, int second)
{
int sum = first;
for (int i = 0; i < second; i++)
{
sum += 1;
}
return sum;
}
}
执行结果
dotnet test
也可以使用VS中的测试资源管理器,一次性对解决方案下所有的单元测试用例进行统一测试