2008-12-19 47 views
12

我愛我的Assert.AreEqual擴展到許多不同的類別,已知一個是當然的CollectionAssert,但我能想到的一些例如爲:ImageAssert,XmlAssert等。你是如何延長你的斷言類

您是否創建了自己的Assert類?你想創建什麼樣的新東西?

回答

0

我只是增加了一個實施ImageAssert正如我上面寫的(在我的問題) 我會很高興聽到更多的那種樣品

0

我的很多測試都是圍繞加載一個已知好狀態的對象(比如一個CuttingPath)。執行測試,然後將結果與加載的對象進行比較。如果它們不同,那麼會發生一些「發生」,導致代碼發生變化。

該方法節省大量時間,並允許在需要時進行自定義比較。

4

我喜歡Assert類的感覺,但想要更多地作爲一個通用的驗證框架。我開始使用擴展方法羅傑Alsing的article,現在有一個就像一個系統:

Enforce.That(variable).IsNotNull(); 
Enforce.That(variable).IsInRange(10, 20); 
Enforce.That(variable).IsTypeOf(typeof(System.String)); 
etc. 

如果任何執行失敗,它拋出一個異常。我一直在考慮重構,這樣我就可以納入一個不引發異常的非關鍵評估。有些人喜歡Check.That作爲Enforce的一個變體。這將返回布爾值,但是具有相同簽名的擴展方法。

到目前爲止,我對這種方法的喜好是,我可以在我的單元測試中使用這些方法,以及在實際代碼中進行預驗證和後驗證問題,而無需引用Microsoft.VisualStudio.QualityTools。 UnitTestFramework程序集。我把它放在我的應用程序框架的根組件中,而Enforce就在根部,所以它很容易找到。

0

我認爲如果你重構你的測試以減少重複,那麼你最終會創建自己的框架作爲副產品,當然你的測試框架將會斷言在你的上下文中有意義的幫助者。

一個例子,我心目中是,當測試XHTML報告中,我們結束了,看上去像測試:

assertCoverageEquals(45.5); 

其中背後斷言覆蓋是這樣的:

assertPercentage(COVERAGE_ID, 45.5); 

,然後背後那是使用xpath獲取值的另一種方法,以及知道百分比的格式是什麼的方法。

4

的那是我的解決方案:

using MyStuff; 

using A = Microsoft.VisualStudio.TestTools.UnitTesting.Assert; 

namespace Mytestproj.Tests 
{ 
    public static class Assert 
    { 
     public static void AreEqual(object expected, object actual) 
     { 
      A.AreEqual(expected, actual); 
     } 

     // my extension 
     public static void AreEqual(MyEnum expected, int actual) 
     { 
      A.AreEqual((int)expected, actual); 
     } 

     public static void IsTrue(bool o) 
     { 
      A.IsTrue(o); 
     } 

     public static void IsFalse(bool o) 
     { 
      A.IsFalse(o); 
     } 

     public static void AreNotEqual(object notExpected, object actual) 
     { 
      A.AreNotEqual(notExpected, actual); 
     } 

     public static void IsNotNull(object o) 
     { 
      A.IsNotNull(o); 
     } 

     public static void IsNull(object o) 
     { 
      A.IsNull(o); 
     } 
    } 
}