在任务并行库周围是否有一个接口包装器,以便我可以将其交换出来进行单元测试?

时间:2010-08-23 12:16:28

标签: .net multithreading unit-testing task-parallel-library

我刚才问过this question。我现在知道这是一个坏主意,并且应该抽象封装任务的调度和运行,以便可以从单元测试中传入同步调度程序。

我目前有使用Task Parallel Library(TPL)的代码,我想在我的类型中注入类似ITaskScheduler的内容,以便提取调度责任并让我传入在我的测试中同步替代。

这样的事情存在吗?我正在寻找包裹Task.Factory.StartNewTask.ContinueWith的内容。我不认为自己卷起来不是太多的工作,但我确定有很多小的陷阱我真的不想花时间去做,如果有一个已经可用的话。

2 个答案:

答案 0 :(得分:5)

替换Task类很难,即使您从Task继承了一个新类:因为TaskSchedulerTaskFactoryTask上不是通用的它根本没用多少。

根据我的经验,更好的方法是使用您自己的TaskScheduler类(继承自TaskScheduler)。您可以将其传递给TaskFactory构造函数,然后在整个过程中使用TaskFactory

现在进行测试,您可以使用具有不同并行度的不同TaskScheduler(如果需要,可以使用最少1个线程),并且可以向TaskScheduler类添加额外的日志记录,以记录每个任务,因为它开始和结束。

答案 1 :(得分:2)

您可以定义这样的接口,并将实际的库类包装在实现接口的Facade中。要进行测试,请将Facade与模拟对象交换。