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