2010-07-01 210 views
2

如何對使用System.Windows.Threading.Dispatcher的類進行單元測試?如何使用System.Windows.Threading.Dispatcher對單元進行單元測試

我正在關注WPF設置中的MVVM模式。作爲這個的一部分,我創建了一個DispatchingBlah類,遵循DispatchingQuoteSource的模式,我在this video(見1:06:16 ish)中看到。

我想測試我的類已將正確的東西排入調度器對象,但我無法弄清楚如何做到這一點。我無法(根據我的發現)同步刷新隊列以查看排隊對象的效果。我也看不到如何查詢隊列來檢查已添加的內容。

我需要編寫System.Windows.Threading.Dispatcher類的一些接口嗎?

回答

1

我會將調度程序類隱藏在接口後面,並使用模擬調度程序(或者只是一個手動假冒)進行測試。這樣,您可以驗證是否進行了正確的調用,而無需嘗試實際測試實際的調度程序。

這當然假設您要測試VM,並且您信任調度程序。即使在這種情況下,單獨測試調度員可能也會更好。

1

實際上,已經存在比調度器類中的接口更好的解決方案。它叫做SynchronizationContext。這是Dispatcher創意的抽象概念,也適用於Windows窗體(使用ISynchronizeInvoke)。所以你也可以爲你的課程增加可重用性。

Nito.Async庫有幾種類型,在使用SynchronizationContext進行單元測試時很有用;它有許多使用這些類的單元測試。

+0

嗯,顯然它不是很容易包裝在ISynchronizeInvoke接口中使用System.Windows.Threading.Dispatcher .. http://geekswithblogs.net/robp/archive/2008/03/28/why-doesnt -dispatcher-implement -isynchronizeinvoke.aspx – pauldoo 2010-07-02 09:07:43

+0

這不是我的意思。 'Dispatcher'包裝在'SynchronizationContext'類中,'ISynchronizeInvoke'包裝在一個(不同的)'SynchronizationContext'類中。抽象是'SynchronizationContext',而不是'ISynchronizeInvoke'。 – 2010-07-02 12:44:13

+0

P.S.請在2009年1月26日查看我對該博客的評論。 – 2010-07-02 12:48:28

相關問題