你是如何扩展你的Assert类的

时间:2008-12-19 16:29:04

标签: c# unit-testing tdd assertions

我喜欢扩展我的Assert.AreEqual到许多不同的类,当然已知的是CollectionAssert,但我可以想到更多,例如:ImageAssert,XmlAssert等。

您是否创建了自己的Assert类?你想创造什么样的新品?

5 个答案:

答案 0 :(得分:4)

我喜欢Assert类的感觉,但想要一些更适合作为通用验证框架的东西。我从Roger 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是根,所以它很容易到达。

答案 1 :(得分: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);
        }
    }
}

答案 2 :(得分:0)

我的很多测试都围绕加载一个具有已知良好状态的对象(如CuttingPath)。执行测试,然后将结果与加载的对象进行比较。如果它们不同,则会发生某些事情,导致代码发生变化。

这种方法可以节省大量时间,并在需要时进行自定义比较。

答案 3 :(得分:0)

我认为如果你重构你的测试以减少重复,那么你最终会创建自己的框架作为副产品,当然你的测试框架将拥有在你的上下文中有意义的断言帮助。

我想到的一个例子是在测试xhtml报告时,我们最终得到了类似的测试:

  assertCoverageEquals(45.5);
断言覆盖的背后是:

  assertPercentage(COVERAGE_ID, 45.5);

然后在那之后使用xpath来获取值,另一种方法知道格式化百分比是什么。

答案 4 :(得分:0)

我刚刚在上面写的ImageAssert添加了一个实现(在我的问题中) 我很乐意听到更多这样的样本