实现NUnit 2.5 Constraint.Write *()方法的正确方法是什么?

时间:2009-07-08 20:24:45

标签: .net unit-testing nunit constraints

我计划实现自己的一组约束,并且在理解如何实现Constraint类的以下方法时遇到一些困难。

public abstract class Constraint
{
    public abstract void WriteDescriptionTo( MessageWriter writer );
    public virtual void WriteMessageTo( MessageWriter writer );
    public virtual void WriteActualValueTo( MessageWriter writer );
}

documentation建议阅读源代码以了解如何使用它们,但我已经研究了许多约束,并且没有看到太多偏离它们的实现 - 通常是WriteDescriptionTo()是唯一实现的方法。

根据我的观察:

    调用
  • WriteMessageTo()将断言错误消息写入控制台
  • WriteActualValueTo()格式化赋予约束的实际参数的值,以便写入控制台

但是,我不理解WriteDescriptionTo()的目的,也不理解为什么它是抽象的 - 特别是在覆盖WriteMessageTo()时就足够了。

1 个答案:

答案 0 :(得分:2)

通过查看源代码,WriteDescriptionTo方法用于在失败时写出约束的预期值。通用的两行视图用于显示失败的约束;第一行包含期望值,第二行包含实际值。

WriteDescriptionTo是抽象的,以强制约束来实现它。方法WriteActualValueTo用于写入实际值。这是在基类Constraint类中实现的,并标记为虚拟。默认情况下,它只输出原始实际值,但它是虚拟的意味着每个继承的约束都可以覆盖它,并在需要时执行更具体的操作。