zoukankan      html  css  js  c++  java
  • 测试框架nunit之assertion断言使用详解

    任何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);

  • 相关阅读:
    Redis 3.0.4 链表
    Redis 3.0.4 简单动态字符串(sds)
    4. 寻找两个有序数组的中位数
    redis主从同步异常
    redis重命名flushall和flushdb重启失败
    redis3.2 aof重写
    【转载】Redis 4.0 自动内存碎片整理(Active Defrag)源码分析
    [转]memcached对key和value的限制 memcached的key最大长度和Value最大长度
    LSM树(Log-Structured Merge Tree)存储引擎
    Linux使用详解(进阶篇)
  • 原文地址:https://www.cnblogs.com/wolfocme110/p/5096827.html
Copyright © 2011-2022 走看看