天天看點

測試文法之斷言介紹(三)(轉)

在測試架構中,斷言是單元測試的核心,我們在測試中要對其程式斷言,如果某個斷言失敗,方法的調用不會傳回值,并且會報告一個錯誤。如果一個測試包含多個斷言,那些緊跟失敗斷言的那些斷言都不會執行,是以每個測試方法最好隻有一個斷言。

下面看看NUnit架構吧,來2張圖:

測試文法之斷言介紹(三)(轉)

現在,我們使用經典的NUnit架構的最新版本,可以用三種方法來寫我們的斷言:

标準模式:過去比較經典的寫法。這些方法在NUnit.Framework命名空間下的Assert類中以靜态方法提供,對其不同的類型(字元串、集合、檔案)NUnit.Framework架構還提供了字元串斷言、集合斷言、檔案斷言。

限制模式:全新的寫法,使用Assert.That()方法來限制擴充所有的斷言,使用新增NUnit.Framework.SyntaxHelpers命名空間下提供的方法調用NUnit.Framework.Constraints命名空間下的各種限制。

繼承模式:隻要把測試的類繼承NUnit.Framework.AssertionHelper類,可以使用Expect()方法來替換Assert.That()方法。

在這裡,我把Assert方法分為:同等斷言、一緻性斷言、比較斷言、類型斷言、條件測試、工具方法這6類,另外還有字元串斷言、集合斷言、檔案斷言。

當然按照限制方式,也可以大緻分為Equal Constraint、Same As Constraint、Condition Constraints、Comparison Constraints、Type Constraints、String Constraints、Collection Constraints、Property Constraint、Compound Constraints、Custom Constraints、List Mapper等。

下面我依次介紹一下斷言,使用三種方式來寫自己的斷言。

Equality Asserts(同等斷言)

Identity Asserts(一緻性斷言)

Comparison Asserts(比較斷言)

Type Asserts(類型斷言)

Condition tests(條件測試)

Utility methods(工具方法)

StringAssert(字元串斷言)

CollectionAssert(集合斷言)

FileAssert(檔案斷言)

其他限制

NUnit.Framework提供了Assert.AreEqual()、Assert.AreNotEqual()方法測試兩個對象是否相等。方法支援相同類型,不同類型,多元數組,嵌套數組,集合類互相比較。

NUnit.Framework.AssertionHelper命名空間下提供了Is.EqualTo(object)方法使用同等限制條件來測試兩個對象是否相等。當然了,我們繼承NUnit.Framework.AssertionHelper類,可以使用Expect()方法來替換Assert.That()方法。下面給出這個例子:

注意:需要引用NUnit.Framework,NUnit.Framework.AssertionHelper,NUnit.Framework.Constraints命名空間,并把測試類繼承AssertionHelper。

Assert.AreSame()和Assert.AreNotSame()方法測試兩個對象是否是同一個對象。Assert.Contains方法用來測試在一個數組或清單裡是否包含該對象。

NUnit.Framework.AssertionHelper命名空間下提供了Is.SameAs(object)方法使用Same As限制條件來測試兩個對象是否是相同對象。使用繼承也是如此。

NUnit.Framework架構為我們提供了下面四個方法:

Assert.Greater(x, y)方法用于測試一個對象是否大于另外一個對象。

Assert.GreaterOrEqual(x, y)方法用于測試一個對象是否大于等于另外一個對象。

Assert.Less(x, y)方法用于測試一個對象是否小于另外一個對象。

Assert.LessOrEqual(x, y)方法用于測試一個對象是否小于等于另外一個對象。

NUnit.Framework.AssertionHelper命名空間下提供了Is.GreaterThan(IComparable)、Is.GreaterThanOrEqualTo(IComparable)、Is.AtLeast(IComparable)、 Is.LessThan(IComparable)、Is.LessThanOrEqualTo(IComparable)、Is.AtMost(IComparable)方法使用比較限制條件來測試比較兩個對象。使用繼承也是如此。

Assert.IsAssignableFrom(),Assert.IsNotAssignableFrom(),Assert.IsInstanceOfType(),Assert.IsNotInstanceOfType()方法讓我們可以構造一些關于對象類型的斷言。

同理,NUnit.Framework.AssertionHelper命名空間下提供了Is.TypeOf(Type)、Is.InstanceOfType(Type)、Is.AssignableFrom(Type)方法使用類型限制條件來測試對象類型。使用繼承也是如此。

測試架構提供了Assert.IsTrue,Assert.IsFalse,Assert.IsNaN,Assert.IsEmpty、Assert.IsNotEmpty,Assert.IsNull、Assert.IsNotNull方法分别用于測試兩個對象是否正确,錯誤,非數字,(字元串或集合)空、非空,引用為空、引用不為空。

而NUnit.Framework.AssertionHelper命名空間也提供相類似的方法使用條件限制測試對象。直接看例子:

我們想對測試有自定義控制,測試架構提供了兩個實用方法:Assert.Fail()和Assert.Ignore()方法。這對于開發你自己的特定項目的斷言,例如用于判斷中它非常有用。

Assert.Fail()方法表示這個測試方法是一個失敗方法,這個失敗是基于其他方法沒有封裝的測試。

Assert.Ignore()方法表示這個測試方法是一個忽略的方法,在測試過程中,将忽略這個測試。

StringAssert類提供許多AreEqualIgnoringCase、Contains、StartsWith、EndsWith、IsMatch、Equals、ReferenceEquals方法,這些方法在檢查字元串值時是有用的。

而NUnit.Framework.AssertionHelper命名空間也提供相類似的Text.Contains(string)、Text.DoesNotContain(string)、Text.StartsWith(string)、Text.DoesNotStartWith(string)、Text.EndsWith(string)、Text.DoesNotEndWith(string)、Text.Matches(string)、Text.DoesNotMatch(string) 方法使用字元串限制檢查字元串。直接看例子:

CollectionAssert類提供許多方法,像AllItemsAreInstancesOfType、AllItemsAreNotNull、AllItemsAreUnique、AreEqual(相同對象和次序)、AreEquivalent(相同對象次序不同)、AreNotEqual、AreNotEquivalent、Contains、DoesNotContain、IsEmpty、IsNotEmpty、IsNotSubsetOf、IsSubsetOf、ReferenceEquals。這些方法在檢查集合值和比較兩個集合時是有用的。集合參數必須實作IEnumerable接口。

而NUnit.Framework.AssertionHelper命名空間也提供相類似的方法使用集合限制檢查集合。下面用例子說明,一看就明白。

FileAssert類提供AreEqual、AreNotEqual方法來比較兩個檔案,檔案可以作為Stream、FileInfo、指定的檔案路徑來操作。

這些限制都是新增的,由于和經典的斷言沒有一緻的分類,我把它們單獨列出來了,也在這裡說說。

屬性限制。由主要測試對象的屬性。

進行對象間的比較。由幾個方法複合作用。

集合映射,比如下面的例子,測試strings數組對應項的Length屬性是否為lengths對應項的值。

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀