2010-08-23 29 views
3

前一陣子我問了this question。我現在知道這是一個糟糕的想法,應該抽象封裝任務的調度和運行,以便可以從單元測試中傳入一個同步調度器。在Task Parallel Library中是否有一個接口包裝,以便我可以將它交換出來進行單元測試?

我目前得到的代碼使用了Task Parallel Library(TPL),我想在我的類型中注入類似ITaskScheduler的東西,以提取調度責任並使我能夠在我的測試中傳遞同步替代方案。

這樣的事情是否存在?我正在尋找包裝Task.Factory.StartNewTask.ContinueWith的東西。我不認爲推出自己的作品並不是太多工作,但我確信有很多小小的陷阱,如果有一個已經存在的,我真的不想花時間做這件事。

+1

只要您將Task API直接放置在界面後面,我不認爲可能存在任何問題。使用該接口與直接使用API​​應該沒有多大區別。 – 2010-08-23 13:00:50

回答

5

代入Task類是硬的,即使你從Task繼承一個新的類:自TaskSchedulerTaskFactory不在Task一般也不會太大幫助的。

根據我的經驗,更好的方法是使用您自己的TaskScheduler類(繼承自TaskScheduler)。你可以將它傳遞給一個TaskFactory的構造函數,然後在整個過程中使用該TaskFactory

現在測試你可以使用不同的TaskScheduler有不同程度的並行性(降低到1個線程,如果你想),你可以到你的TaskScheduler類添加額外的日誌記錄,記錄每個任務,因爲它啓動和完成。

2

您可以定義這樣一個接口,並將實際庫類包裝在實現該接口的外觀中。爲了進行測試,將您的Facade換成模擬對象。

相關問題