2009-07-08 124 views
2

我打算实施自己的一套约束条件,并且在理解如何实施Constraint类的以下方法时遇到一些困难。实现NUnit 2.5 Constraint.Write *()方法的正确方法是什么?

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()就足够了。

回答

2

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

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

+0

谢谢你的信息阿德里安。这听起来像我应该重写WriteDescriptionTo()和WriteActualValueTo()如果我打算使用默认的错误格式。重写WriteMessageTo()意味着其他两种方法的默认或不执行操作就足够了。 – 2009-07-09 14:35:08

相关问题