我想通過嘲笑依賴關係編寫單元測試用例。整體流程如下。如何編寫異步方法的單元測試用例?
我們有一個WorklistLoader
它有一個異步方法LoadWorklistItemsAsync()
。要完成這個任務WorklistLoader
是依賴於低層API(我想模擬)QueryManager.StartQueryTask()
。 StartQueryTask()
也是一種異步方法,它查詢文件系統並定期提出ProgressChanged()
,然後在最後引發CompletedEvent
。 StartQueryTask()
返回對TPL Task
的引用。所述StartQueryTask
的
簽名是
Task StartQueryTask(
"SomeId",
EventHandler<ProgressChanged> progressChanged,
EventHandler<QueryCompleted> queryCompleted);
一旦WorklistLoader
從QueryManager
臨危的ProgressChanged
事件時,它會進行一些處理,然後提高其ProgressChanged
事件(賦予了ViewModel
已經訂閱)。
我想測試LoadWorklistItemsAsync()
方法WorklistLoader
與嘲諷QueryManager.StartQueryTask()
。
這是我的問題。
- 是編寫單元測試爲
Async()
方法與嘲諷的最佳做法? - 如何編寫單元測試用例其相關使用TPL的方法呢?(方法返回
Task
型)
另一個問題是
- 如果我嘲笑使用Rhinomocks如何我QueryManager.StartQueryTask()方法它會是什麼樣子? (模擬代碼,它必須提高進度,完成事件並返回任務)。
您使用的是模擬框架,或者只是手動實現一個接口/子類自己? – 2013-03-04 18:12:52
問題1真的沒有什麼與異步,只是嘲笑。例如您必須以某種方式將模擬注入「WorklistLoader」,而不管使用模擬的最終方法是異步還是同步。至於2,我建議你看看http://www.srtsolutions.com/testing-async-methods-in-c-5 – 2013-03-04 19:39:25