.NET单元测试学习(一)

    技术2025-09-22  61

     断言(Assertions)是单元测试框架中比较核心的应用,如果一个测试方法中有多个断言,其中一个断言失败也会导致测试不通过,或报告错误信息。断言分为多种,如下列表:          ●Equality Asserts;          ●Identity Asserts;          ●Comparison Asserts;          ●Type Asserts;          ●Condition Test;          ●Utility Methods;      

         Equality Asserts

          此方法判断两个参数是否相等,重载方法提供了公共的值类型,所以参数间不存在装箱操作就可直接使用进行比较。      主要的此类断言比较方法如下:          (1)Assert.AreEqual(param1,param2,[message],[param[]])            (2) Assert.AreNotEqual(参数同上)       param1是你期望的值,param2是测试用的值,如果参数是数值,不能的数据类型之间的比较也是允许的,比如说INT 与DOUBLE等。如:Assert.AreEqual(12,2.5)   。但是在对Float类型进行比较时,需要设置一个偏差数(tolerance),也就是说两个数的偏差在这个范围内就认为是相等的。           此外Assert.AreEqual还可以用来比较N维数组或集合(collection),只要数据组维数、元素数据类型相等再加上各相应的元素值也相等,则认为两个比较的参数相等。

          Identity Asserts

          Assert.AreSame and Assert.AreNotSame  是用来判断两个参数所引用的对象是否一致,如:

              Assert.AreSame(object param1,object param2,[message])          Assert.AreNotSame(object param1,object param2,[message])

         另外还有一个方法(Assert.Contain())用来判断一个对象是否包含一个数组或IList对象。

              Assert.Contain(object param1,Array param2)          Assert.Contain(object param2, IList param2)

          Condition Test

          这个方法测试的是条件是否成立,同也可选择性的使用参数来返回信息。方法签名如下:

              Assert.IsTrue(condition,[message])          Assert.IsFalse(condition,[message])          Assert.IsNull(object anObject,[message])          Assert.IsNotNull(object anObject,[message])           Assert.IsNaN(Double anDouble,[message])    //值是否是数字          Assert.IsEmpty(String anString,[message])          Assert.IsNotEmpty(String anString,[message])          Assert.IsNotEmpty(ICollection collectionType,[message])     注意:Assert.IsNotEmpty 和Assert.IsEmpty只能用于判断String和Collection类型。

         Comparison Test

         在了解了关于两对象的相等测试后,就会想要是大于,小于,大等于,小于等于怎么写?同样断言提供了上述的几个方法分别是:Greater,Less,GreaterOrEqual,LessOrEqual. 方法签名如下:

              Assert.Greater( int arg1, int arg2,[message] );          Assert.Greater( int arg1, int arg2, [string message] );          Assert.Greater( decimal arg1, decimal arg2, [string message]  );          Assert.Greater( double arg1, double arg2, [string message]  );          Assert.Greater( double arg1, double arg2 , [string message] );          Assert.Greater( float arg1, float arg2 , [string message] );          Assert.Greater( IComparable arg1, IComparable arg2, [string message]  );

         同样另外三个比较方法的参数也跟上面一样,就不哆嗦了。

         Type Asserts

         我们可以去断言一个对象的类型是什么,比如说方法的返回值类型等等。通过如下方法:

       Assert.IsInstanceOfType( Type expected, object actual, [string message], [params object[] parms]  );   Assert.IsNotInstanceOfType( Type expected, object actual, [string message], [params object[] parms]  );         IsInstanceOfType和IsInstanceOfType用来判断是否兼容于指定类型,即expected 是否兼容(属)于actual ,示例:            Type t=new object().GetType();            string s="dd";            Assert.IsInstanceOfType(s,t);

          Utility Method

         故明思义,效用方法。它包括两个方法Fail() and Ignore() 它能够让你更直接的控制测试程序。如下:

                   Assert.Fail([string message],[param object[]])               Assert.Ignore([string message],[param object[]])

             Fail()方法是让你能够产生一个失败的测试,即让某个测试立即失败。Ignore()能够动态地使一个或一组测试在运行时被忽略。不过这两个并不常用。

         StringAssert

         它提供了一系列方法来验证string类型的值,方法如下:

              StringAssert.Contains(string expected,string actual,[message],[params object[] args])          StringAssert.StartsWith(同上)          StringAssert.EndWith(the same as above)          StringAssert.AreEqualIgnoringCase(the same as above)          StringAssert.IsMatch(the same as above)

         CollectionAssert

         提供一系列方法来校验集合本身的内容或者两集合之间的比较,如下:

              .AllItemsAreInstancesOfType(ICollection,Type,[message],[param[]])   //判断指定集合中的所有元素是否是所需类型的实例(ICollection是要测试的集合,Type应该为ICollection中包含每个对象查找的对象的类型)。          .AllItemsAreNotNull(ICollection,Type,[message],[param[]])  //判断集合中所有元素是否为空,如果为空则测试失败。          .AllItemsAreUnique(ICollection,Type,[message],[param[]])    //判断集合中的所有元素是否唯一,如果集合中任意两个元素相等则测试失败。          .AreEqual(ICollection expect,ICollection Actual,[],[],[])   //这个方法重载的参数还是很多的,相关的可以查下MSDN,测试两个集合是否相等(所谓的相等是指具有相同顺序、相同数量的相同元素)expect是测试要求的,Actual是测试生成的集合,          .AreEquivalent(ICollection expect,ICollection Actual,[message],[param[]])    //判断两个集合是否包含相同的元素,如果一个集合中包含另一个集合没有的元素则引发异常。          .AreEqual(.........)   //参数与AreEqual相同,功能则相反          .AreNotEquivalent(............)    //参数与世AreEquivalent同,功能则相反。          .Contains(ICollection, Object,[message],[param[]])    //判断集合是否包含指定的元素           .DoesNotContain(the same as above)    //the reversed as above

    最新回复(0)