断言(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