.NET單元測試學習(一)

lingxyd_0發表於2013-01-07


轉貼於:http://blog.csdn.net/cpcpc/article/details/6185853

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


相關文章