3

私は少し前にこの質問をしました。これは悪い考えであり、タスクのスケジューリングと実行のカプセル化を抽象化して、単体テストから同期スケジューラーを渡すことができるようにする必要があることを今では知っています。

現在、タスク並列ライブラリ(TPL)を使用するコードがありますITaskScheduler。タイプに何かを挿入して、スケジューリングの責任を抽出し、テストで同期代替を渡すことができるようにしたいと思います。

そのようなものは存在しますか?Task.Factory.StartNewラップして何かを探していますTask.ContinueWith。自分でロールするのはそれほど手間がかかるとは思いませんが、小さな落とし穴がたくさんあると思います。すでに利用可能なものがあれば、それを行うのに時間をかけたくありません。

4

2 に答える 2

5

からTask新しいクラスを継承したとしても、クラスを置き換えるのは難しいです。TaskTaskSchedulerTaskFactoryTask

私の経験では、独自のTaskSchedulerクラス (から継承TaskScheduler) を使用することをお勧めします。TaskFactoryそれをコンストラクターに渡して、それをTaskFactory全体で使用できます。

テストのために、TaskSchedulerさまざまな程度の並列処理 (必要に応じて 1 スレッドまで) を使用して別のスレッドを使用し、TaskSchedulerクラスに追加のログを追加して、各タスクの開始時と終了時にログを記録することができます。

于 2010-09-02T02:22:11.663 に答える
2

このようなインターフェースを定義し、インターフェースを実装するファサード内に実際のライブラリ クラスをラップすることができます。テストのために、Facade をモック オブジェクトと交換します。

于 2010-08-24T09:02:15.033 に答える