2011-10-25 13 views
4

この使命を帯び方法ユニットテストのアイデアを必要とする:あなたは、私はタスクを1つずつキューにTPLを使用していると私はそれをテストしたいと思います見ることができるように私はこれが問題になっている方法である

public void StartBatchProcessing(IFileBatch fileBatch) 
{ 
    var dataWarehouseFactsMerger = m_dataWarehouseFactsMergerFactory.Create(fileBatch); 
    dataWarehouseFactsMerger.Merge(); 

    if(!m_isTaskStarted) 
    { 
     m_isTaskStarted = true; 
     m_lastQueuedBatchProcessingTask = new TaskFactory().StartNew(() => ProcessBatch(dataWarehouseFactsMerger)); 
    } 
    else 
    { 
     m_lastQueuedBatchProcessingTask = m_lastQueuedBatchProcessingTask.ContinueWith(previous => ProcessBatch(dataWarehouseFactsMerger)); 
    } 
} 

タスクは、直前のタスクが完了するとすぐに到着する順序で実行されます。

ProcessBatchメソッドは保護されているので、派生クラスで上書きしてフラグなどを設定してアサートすることができると思います。

すべてのアイデアは大歓迎です。

+0

'StartBatchProcessing'はあるスレッドまたは複数のスレッドで呼び出されていますか? –

+0

@ LasseV.Karlsen:それは1つのスレッドで呼び出されますが、それは本当に重要ですか?私はちょうどテスト内の単一のスレッド上で実行されるように、メソッド内のロジックをテストしたいと思います。 –

答えて

2

fileBatchが入力されたロギングが可能な実装と各タスクの開始時間を実装する、DataWarehouseFactsMergerの実装を作成することができますが、それ以外は実際に何もしません。

+0

私は私が従わないことを恐れている。小さな例を追加することは可能でしょうか? –

+0

私はあなたの型を見ることができないので難しいですが、 'IDataWarehouseFactsMergerFactory'や' IDataWarehouseFactsMerger'のようなインターフェースを作ると、実生活やテストのための実装を行うことができます。 'ProcessBatch'は' IDataWarehouseFactsMerger'を受け入れなければなりません。 –

+0

私は基本的にProcessBatchメソッドをオーバーライドして各タスクが開始された時刻を記録する必要があることを理解していると思います。 –

関連する問題