NUnit断言

经典模型

经典模型对于每一种断言都有单独的一个方法

StringAssert.AreEqualIgnoringCase("Hello", myString);

Assert类提供一些非常常用的断言方法:

Assert.True
Assert.False
Assert.Null
Assert.NotNull
Assert.Zero
Assert.NotZero
Assert.IsNaN
Assert.IsEmpty
Assert.IsNotEmpty
Assert.AreEqual
Assert.AreNotEqual
Assert.AreSame
Assert.AreNotSame
Assert.Contains
Assert.Greater
Assert.GreaterOrEqual
Assert.Less
Assert.LessOrEqual

除此之外还有以下几个类也提供相应的断言方法:

StringAssert
CollectionAssert
FileAssert
DirectoryAssert

约束模型
约束模型只有Assert.That()一种方法,参数是约束对象。根据不同的断言类型有不同的约束对象,形成一系列重载函数。以下两个断言形式是等价的:

Assert.That(myString, Is.EqualTo("Hello"));
Assert.That(myString, new EqualConstraint("Hello"));

目前NUnit框架仍然支持旧的经典模型,但是已不添加新功能,新功能都是使用约束模型实现的。因此应尽可能的使用约束模型。有些断言形式只能使用约束模型,如:

int[] array = new int[] { 1, 2, 3 };
Assert.That(array, Has.Exactly(1).EqualTo(3));
Assert.That(array, Has.Exactly(2).GreaterThan(1));
Assert.That(array, Has.Exactly(3).LessThan(100));

而本质上经典模型全部是使用约束模型实现的,也就是说所有的经典模型的断言形式都能找到对应的约束模型的形式,比如以下两个断言是等价的:

Assert.AreEqual(4, 2+2);
Assert.That(2+2, Is.EqualTo(4));

多个断言(multiple asserts)
一般来说如果一个函数包含多个断言,一个断言失败了,后续的断言(如果有的话)不会执行,因此,一般一个测试仅会有一个断言。但是某些情况,比如一个UI界面样式的测试可能需要在一个测试方法里添加多个断言,此时可以使用Assert.Multiple方法:

[Test]
public void ComplexNumberTest()
{
    ComplexNumber result = SomeCalculation();
    Assert.Multiple(() =>
    {
        Assert.AreEqual(5.2, result.RealPart, "Real part");
        Assert.AreEqual(3.9, result.ImaginaryPart, "Imaginary part");
    });
}                

此时,如果代码块中的第一个断言失败了,测试不会马上终止,而是继续执行第二个断言,最终将结果统一返回。


posted @ 2022-07-08 10:36  celestially98  阅读(97)  评论(0)    收藏  举报