【问题标题】:What is the correct way to implement the NUnit 2.5 Constraint.Write*() methods?实现 NUnit 2.5 Constraint.Write*() 方法的正确方法是什么?
【发布时间】:2009-07-08 20:24:44
【问题描述】:

我计划实现自己的一组约束,但在理解如何实现 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() 时就足够了。

【问题讨论】:

    标签: .net unit-testing nunit constraints


    【解决方案1】:

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

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

    【讨论】:

    • 感谢阿德里安提供的信息。如果我打算使用默认错误格式,听起来我应该重写 WriteDescriptionTo() AND WriteActualValueTo() 。重写 WriteMessageTo() 意味着其他两种方法的默认或无操作实现就足够了。
    猜你喜欢
    • 2011-11-06
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2011-02-23
    • 2011-05-04
    • 2014-04-07
    相关资源
    最近更新 更多