NUnit之Assertion详解

系统 1441 0

园子里有了不少介绍NUnit的文章,想到以前本人在上一家公司时也写过内部的PPT介绍,故将其整理、修改,并将分成以下三部分分别进行介绍:

1:NUnit之Assertion详解

2:NUnit之Attribue详解

3:NUnit扩展

其中1、2部分比较简单,仅供对NUnit不太了解的网友参考,有兴起对NUnit进行扩展的网友可以关注第三部分。

  

NUnit之Assertion详解

 

NUnit是.Net平台的测试框架,广泛同于.Net平台的单元测试和回归测试中。

任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xUnit(如Junit、phpUnit、pythonUnit)相比,由于大量使用了Generic、Attribute等语言特征,NUnit提供了更为方面、灵活的测试方法,下面先介绍一下断言。

Nunit一共有四个类断言类,分别是Assert、StringAssert、FileAssert和DirectoryAssert,它们都在NUnit.Framework命名空间,其中Assert是常用,也是我们最熟悉的,而另外三个断言类,顾名思义,分别对应于字符串的断言、文件的断言和目录的断言,理论上,仅Assert类就可以完成所有条件的判断,然而,如果合理的运用后面的三个断言,将使代码更加简洁、美观,也更加便于理解和维护。

 

一:Assert类

对于我们通常的单元测试代码,Assert类中的静态方法就可以完成,其中大家最熟悉的应该是Assert. AreEqual()方法,其实,除了AreEqual,NUnit还提供了众多的比较方式,满足不同的代码要求。

  

1:相等/不相等判断

AreEqual:判断两个值相等

AreNotEqual:判断两个值不相等

示例:

      Int a=
      
        1
      
      
Assert.AreEqual(a, 1 ); // 通过判断
Assert.AreEqual(a, 2 ); // 不能通过判断

 

注意 ,除了AreEqual/ AreNotEqual,下面几乎所有的方法都支持多态(多种数据类型),以及多参数,除了经常使用的Assert .AreEqual(int a,int b),还有一种典型的参数形式:

      Assert.AreEqual(
      
        int
      
       a,
      
        int
      
       b,
      
        string
      
      
        message
      
      );
      
或者 Assert.XXX( int a, int b, string message );

其中第三个参数是条件不通过时输出的信息,以便于错误的定位

对于double和decimal类型,这两个方法还支持比较时的浮点误差

例如以下代码:

      
        double
      
       a = 
      
        1.1
      
      ;
      
double b = 1.11 ;
double c = 0.1 ;
Assert.AreEqual(a, b, c); // 通过判断
c= 0.01 ;
Assert.AreEqual(a, b, c); // 不能通过判断


2:类的判断

AreSame:判断两个对象相等

AreNotSame:判断两个对象不相等

Contains:判断是否是否某对象

示例:

      List<
      
        string
      
      > list = 
      
        new
      
       List<
      
        string
      
      >();
      
list.Add( " a " );
list.Add( " b " );
Assert.Contains( " a " , list); // 通过判断
Assert.Contains( " aa " , list); // 不能通过判断

 

3:条件判断

IsTrue:判断条件为真

True:同上

IsFalse:判断条件为假

False:同上

IsNull:判断是否为空

Null:同上

IsNotNull:判断不为空间

NotNull:同上

IsNaN:判断数值是Nan

IsEmpty/IsNotEmpty:判断字符串是否为空/不为空

IsEmpty/IsNotEmpty:判断集合是否为空/不为空

示例:

      
        int
      
       a=
      
        100
      
      ;
      
Assert. IsTrue(a== 100 ); // 通过判断
Assert. True(a== 100 ); // 通过判断

 

4:比较判断

Greater:大于

GreaterOrEqual:大于等于

Less:小于

LessOrEqual:小于大于

示例:

      
        int
      
       a = 
      
        100
      
      ;
      
Assert.Greater(a, 99 );
Assert.GreaterOrEqual(a, 100 );

 

5:类型判断

IsInstanceOfType/ IsNotInstanceOfType:是/不是某个类的实例(从2.5之后支持泛型)

例如:

      
        public
      
      
        class
      
       Person
      
{
public string name { set ; get ;}
}

Person p = new Person();
p.name = " a " ;
Assert.IsInstanceOf( typeof (Person), p); // 通过判断
Assert.IsInstanceOf( typeof (System.String), p); // 不能通过判断

 

6:异常判断

Throws:应该抛出某类型的异常

DoesNotThrow:不应该抛出某类型的异常

 

7:其它常用的方法

Pass:强行让测试通过

Fail:强行让测试失败

Ignore:忽略该测试方法

Inconclusive:未验证该测试

 

二:StringAssert类

StringAssert用于String类型的断言判断:

StringAssert.Contains:是否包含子串

StringAssert.StartsWith:是否以某子串开头

StringAssert.EndsWith:是否以某子串结尾

StringAssert.AreEqualIgnoringCase:两个字符串是否在不区分大小写时相等

StringAssert.IsMatch:是否匹配,(使用正则表达式进行字符串比较)

示例:

      
        string
      
       s1 = 
      
        "
      
      
        abc
      
      
        "
      
      ;
      

StringAssert.Contains( " b " , s1);
StringAssert.StartsWith( " a " , s1);
StringAssert.EndsWith( " c " , s1);

string s2 = " aBc " ;
StringAssert.AreEqualIgnoringCase(s1, s2);

StringAssert.IsMatch( " [a|book] " , " 123 " );

 

三:CollectionAssert类

AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例

AllItemsAreNotNull:集合中的各项均不为空

AllItemsAreUnique:集合中的各项唯一

AreEqual:两个集合相等

AreEquivalent:两个集合相当

AreNotEqual:两个集合不相等

AreNotEquivalent:两个集合不相当

DoesNotContain:集合中不包含某对象

IsSubsetOf:一个集合是另外一个集合的子集

IsNotSubsetOf:一个集合不是另外一个集合的子集

IsEmpty:集合为空

IsNotEmpty:集合不为空

IsOrdered:集合的各项已经排序

 

示例:

      List<
      
        int
      
      > a = 
      
        new
      
       List<
      
        int
      
      >();
      
List< int > b = new List< int >();

CollectionAssert.IsEmpty(a);

for ( int i = 1 ; i <= 10 ; i++)
{
a.Add(i);
b.Add(i);
}

CollectionAssert.AreEqual(a, b);
CollectionAssert.IsOrdered(a);

b.Remove( 1 );
CollectionAssert.IsSubsetOf(b, a);

CollectionAssert.AreEqual(a, b);

 

后记:关于NUnit的断言就大概介绍这些,其实,不仅仅是测试人员,.Net程序员也应该熟悉掌握NUnit,以保证自己的代码质量,关于NUnit的进一步使用,将陆续介绍。

由于本人水平有限,不妥之处,欢迎大家批评指正,谢谢!



NUnit之Assertion详解


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论