我刚才问过this question。我现在知道这是一个坏主意,并且应该抽象封装任务的调度和运行,以便可以从单元测试中传入同步调度程序。
我目前有使用Task Parallel Library(TPL)的代码,我想在我的类型中注入类似ITaskScheduler
的内容,以便提取调度责任并让我传入在我的测试中同步替代。
这样的事情存在吗?我正在寻找包裹Task.Factory.StartNew
和Task.ContinueWith
的内容。我不认为自己卷起来不是太多的工作,但我确定有很多小的陷阱我真的不想花时间去做,如果有一个已经可用的话。
答案 0 :(得分:5)
替换Task
类很难,即使您从Task
继承了一个新类:因为TaskScheduler
和TaskFactory
在Task
上不是通用的它根本没用多少。
根据我的经验,更好的方法是使用您自己的TaskScheduler
类(继承自TaskScheduler
)。您可以将其传递给TaskFactory
构造函数,然后在整个过程中使用TaskFactory
。
现在进行测试,您可以使用具有不同并行度的不同TaskScheduler
(如果需要,可以使用最少1个线程),并且可以向TaskScheduler
类添加额外的日志记录,以记录每个任务,因为它开始和结束。
答案 1 :(得分:2)
您可以定义这样的接口,并将实际的库类包装在实现接口的Facade中。要进行测试,请将Facade与模拟对象交换。