2008-12-19 23 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); 
     } 
    } 
}