我爱我的Assert.AreEqual扩展到许多不同的类别,已知一个是当然的CollectionAssert,但我能想到的一些例如为:ImageAssert,XmlAssert等。你是如何延长你的断言类
您是否创建了自己的Assert类?你想创建什么样的新东西?
我爱我的Assert.AreEqual扩展到许多不同的类别,已知一个是当然的CollectionAssert,但我能想到的一些例如为:ImageAssert,XmlAssert等。你是如何延长你的断言类
您是否创建了自己的Assert类?你想创建什么样的新东西?
我只是增加了一个实施ImageAssert正如我上面写的(在我的问题) 我会很高兴听到更多的那种样品
我的很多测试都是围绕加载一个已知好状态的对象(比如一个CuttingPath)。执行测试,然后将结果与加载的对象进行比较。如果它们不同,那么会发生一些“发生”,导致代码发生变化。
该方法节省大量时间,并允许在需要时进行自定义比较。
我喜欢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就在根部,所以它很容易找到。
我认为如果你重构你的测试以减少重复,那么你最终会创建自己的框架作为副产品,当然你的测试框架将会断言在你的上下文中有意义的帮助者。
一个例子,我心目中是,当测试XHTML报告中,我们结束了,看上去像测试:
assertCoverageEquals(45.5);
其中背后断言覆盖是这样的:
assertPercentage(COVERAGE_ID, 45.5);
,然后背后那是使用xpath获取值的另一种方法,以及知道百分比的格式是什么的方法。
的那是我的解决方案:
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);
}
}
}