3

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

我目前有使用任务并行库(TPL)的代码,我想ITaskScheduler在我的类型中注入类似的东西来提取调度的责任,并使我能够在我的测试中传递一个同步的替代方案。

这样的事情存在吗?我正在寻找可以包装Task.Factory.StartNewTask.ContinueWith. 我不认为自己动手做的工作量不大,但我敢肯定有很多小问题,如果已经有一个,我真的不想花时间去做。

4

2 回答 2

5

Task即使您从Task:继承了一个新类,替换该类TaskScheduler也很困难,因为它TaskFactory不是通用的,Task根本没有多大帮助。

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

现在,对于测试,您可以使用TaskScheduler不同程度的并行(如果需要,可以减少到 1 个线程),并且您可以向您的TaskScheduler类添加额外的日志记录,以在每个任务开始和完成时记录它。

于 2010-09-02T02:22:11.663 回答
2

您可以定义这样的接口并将实际的库类包装在实现该接口的外观中。为了测试,将你的 Facade 与一个模拟对象交换。

于 2010-08-24T09:02:15.033 回答