.NET测试框架测评

2019年8月28日

最近用了xUnit.net,结构简洁。用[Fact]标记无参测试方法,用[Theory]标记有参测试方法并用[InlineData]提供参数。而且,xUnit.net可以使用静态类作为测试类。这使得编写简洁的测试代码成为可能。

美中不足是xUnit的断言除了Assert.True()Assert.False()以外,都不接受自定义错误消息。当在持续集成服务器上出错,且本地无法重现时,根本无法知晓到底具体的出错情况。

xUnit.net团队坚持认为不应添加自定义消息。[1]

文档不丰富。

MS Test (v1)

MS Test和NUnit一样,都要用特性标记测试类和测试方法,但测试类必须是非静态类[2]。广泛支持自定义错误消息。

MS Test早期是Visual Studio里的一个组件,文档里称之为Visal Studio单元测试,这把单元测试的基本概念和单元测试框架混淆,导致现在搜索MS Test很不方便。

MS Test v2

MS Test v2是对MS Test (v1)对.NET Core的支持,并包含其他修改,发布于2016年。[3]

xunit MSTestv2
内联数据测试之嵌套数组
[Theory]
[InlineData(3, new[] { 2, 3 }, new[] { 3, 3 }, new[] { -5, 3 })]
public void MaxPointsTest(int max, params int[][] points) { ... }
[DataTestMethod]
[DynamicData(nameof(GetTestData), DynamicDataSourceType.Method)]
public void MaxPointsTest(int max, params int[][] points) { ... }
public static int[][] GetTestData() { ... }
输出消息 添加以ITestOutputHelper为参数的构造函数

private readonly ITestOutputHelper output;

public WordLadder2Tests(ITestOutputHelper output)
{
	this.output = output;
}
直接使用System.Console
单独执行一个内联测试 可以 不可以

原文发表于2018年6月5日。

参考资料

  1. . Add Assert.Equal(expected, actual, message) overload. . 2015-03-10 [2018-06-05].
  2. Tina-Shi. Test explorer doesn't show static test methods. . 2015-07-15 [2018-06-06].
  3. Pratap. Announcing MSTest Framework support for .NET Core RC2 / ASP.NET Core RC2. . 2016-05-30 [2019-08-28].