我們最近採用了用於驗證域對象的規範模式,並且現在要引入我們的域對象的單元測試以提高代碼質量。規範模式單元測試
我發現的一個問題是如何最好地單元測試下面示例中顯示的驗證功能。規範命中數據庫,所以我想能夠嘲笑它,但因爲它是在線實例化我不能這樣做。我可以處理接口,但這會增加代碼的複雜性,因爲我們可能有很多規範,我們最終會有很多接口(請記住,我們正在引入單元測試,並且不想給任何人一個藉口來拍攝它下)。
鑑於此場景,我們如何最好地解決單元測試我們的域對象中的規範模式的問題?
...
public void Validate()
{
if(DuplicateUsername())
{ throw new ValidationException(); }
}
public bool DuplicateUsername()
{
var spec = new DuplicateUsernameSpecification();
return spec.IsSatisfiedBy(this);
}
感謝您的反饋Mark,我同意你所說的一切,但希望有一個體面的解決方案。有些東西在測試項目中繼承類和重寫方法方面不太合適,我認爲如果我們首先想出了一個體面的設計,那麼我們可以避免這種開銷,這正是我希望的離開這篇文章。 – Burt 2010-02-06 22:15:36
@Burt:那麼我可能誤解了你的問題。 '體面'設計圍繞SOLID進行。特別是開放/關閉原則對可測試性非常重要。這又涉及DI,這意味着大量的界面和抽象工廠,並且我讀了你的問題,說明你現在無法真正負擔這個稅。 – 2010-02-06 22:48:47
我並不想過度搖擺船,但它像接口一樣是最好的方式來實現我想要的。 – Burt 2010-02-06 23:49:55