.NET單元測試學習(一)

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

 

        

發佈了13 篇原創文章 · 獲贊 10 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章