.NET单元测试学习(二)

二、基于约束的断言模式(Constraint-Based Assert Model)

    基于约束的断言模式只有一种方式来完成所有的断言,即Assert.That([],[]). 第二个参数才是完成断言的重要逻辑。

在VS2005中使用此模式需引用三个命名空间: using NUnit.Framework;
                                                            using NUnit.Framework.Constraints;
                                                            using NUnit.Framework.SyntaxHelpers;

     1、Equal Constraint

     用于测试当前值与期望值相等。如Assert.That(myvalue,Is EqualTo(Expectedvalue)); 如果两个不同数值类型的值相同则测试也会通过。float 与double的比较需要另外添加一个参数来指出两者之间的允许公差,在此公差之类则会测试通过。如:Assert.That( 2.1 + 1.2, Is.EqualTo( 3.3 ).Within( .0005 );.  当然在NUnit2.4.2之后,Within 表示的公差也可用于别的类型之间的比较。
   另外,float的NaN值也可以跟NaN值比较,Assert.That( double.NaN, Is.EqualTo( double.NaN ) );此时测试通过。
   要比较两个相同维度、相同元素、相同类型的数组,需要加上AsCollection修饰符,即Assert.That( array2x2, Is.EqualTo( array4 ).AsCollection ); 如果不加则测试失败。
   如果比较两个字符类型,且需要忽略大小则添加IgnoreCase修饰符,同时也可以用于字符型数组或集合。
          如:Assert.That( actual, Is.EqualTo( expected ).IgnoreCase;
   
    2、Same As Constraint

     用于测试两个对象是否相同,前面已经说过相同的概念,同Assert.AreSame()/Assert.AreNotSame()。如:
      [Test]
      public void SameAsTest()
      {
          //定义变量
         
var ex1 = new Exception();
         var ex2 = ex1;
         var ex3 = new Exception();
         //约束语法
         
Assert.That(ex2, Is.SameAs(ex1));
         Assert.That(ex3, Is.Not.SameAs(ex1));
         //使用继承语法
         
Expect(ex2, SameAs(ex1));
         Expect(ex3, Not.SameAs(ex1));
    }

    3、Condition Constraint
    条件测试提供了测试一个对象是否为空、引用为空、是否为真等行为。如:
          Assert.That( anObject, Is.Null );
          Assert.That( anObject, Is.Not.Null );
          Assert.That( condition, Is.True );
          Assert.That( condition, Is.False );
          Assert.That( aDouble, Is.NaN );
          Assert.That( aDouble, Is.Not.NaN );
          Assert.That( aString, Is.Empty );
          Assert.That( collection, Is.Empty );
          Assert.That( collection, Is.Unique );
          Expect( aDouble, NaN );
          Expect( collection, Unique );

    4、Comparsion Constraint
     两个数值之间的比较。如:
     Assert.That(7, Is.GreaterThan(3));  //大于
     Assert.That(7, Is.GreaterThanOrEqualTo(3));   //大于等于
     Assert.That(7, Is.AtLeast(3));    //最少
     Assert.That(7, Is.GreaterThanOrEqualTo(7));  
     Assert.That(7, Is.AtLeast(7));

     Assert.That(3, Is.LessThan(7));//小于
     Assert.That(3, Is.LessThanOrEqualTo(7));  
     Assert.That(3, Is.AtMost(7));   //最多
     Assert.That(3, Is.LessThanOrEqualTo(3));
     Assert.That(3, Is.AtMost(3));
     Expect( 7, GreaterThan(3));                 // Using Inheritance
     Expect( 3, AtMost(7));

    5、Type Constraint
    用于测试对象类型;

      Assert.That("Hello", Is.TypeOf(typeof(string)));   //当前对象类型是否为了期望类型      
      Assert.That("Hello", Is.Not.TypeOf(typeof(int)));       Assert.That("Hello", Is.InstanceOfType(typeof(string))); //当前对象类型是否为期望类型的实例            Assert.That(5, Is.Not.InstanceOfType(typeof(string)));       Assert.That( "Hello", Is.AssignableFrom(typeof(string)));//是否为期望类型所指定的类型       Assert.That( 5, Is.Not.AssignableFrom(typeof(string)));       // Using inheritance       Expect( 5, Not.InstanceOfType(typeof(string)));       Expect( "Hello", AssignableFrom(typeOf(string)));
    6、String Constraint

字符串约束;如:

     string phrase = "Make your tests fail before passing!"
     Assert.That( phrase, Text.Contains( "tests fail" ) );
     Assert.That( phrase, Text.Contains( "make" ).IgnoreCase );
     Assert.That( phrase, Text.StartsWith( "Make" ) );
     Assert.That( phrase, Text.Not.StartsWith( "Break" ) );
     Assert.That( phrase, Text.DoesNotStartWith( "Break" ) );
     Assert.That( phrase, Text.EndsWith( "!" ) );
     Assert.That( phrase, Text.EndsWith( "PASSING!" ).IgnoreCase );
     Assert.That( phrase, Text.Matches( "Make.*tests.*pass" ) );
     Assert.That( phrase, Text.Not.Matches( "your.*passing.*tests" ) );
     Assert.That( phrase, Text.DoesNotMatch( "your.*passing.*tests" ) );
     // Using Inheritance
     Expect( phrase, Contains( "make" ).IgnoreCase );
     Expect( phrase, EndsWith( "!" ) );
     Expect( phrase, Matches( "Make.*pass" ) );

转载于:https://www.cnblogs.com/ision/archive/2008/10/23/1318020.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值