2009-07-08 241 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

相關問題