我希望能通过模拟依赖项来编写单元测试用例。总体流程如下。
我们有一个名为
我们有一个名为
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
已经订阅了该事件)。
我想用模拟QueryManager.StartQueryTask()
来测试WorklistLoader
的LoadWorklistItemsAsync()
方法。
以下是我的问题:
- 使用模拟,如何编写异步(
Async()
)方法的单元测试的最佳实践? - 如何为依赖于TPL的方法编写单元测试用例?(返回
Task
类型的方法)
另一个问题是:
- 如果我使用Rhinomocks来模拟
QueryManager.StartQueryTask()
方法,它会是什么样子?(模拟代码。它必须引发progresschanged
、completed
事件并返回Task
)