2009-05-06 16 views
1

私は大部分のレガシーコードである大規模なC#プロジェクトの新しい機能に取り組んでいます。 私が取り組んでいる分野は、XMLスキーマメッセージを処理し、送信のスケジュールを作成し、送信する必要があるときに通知するレガシータイマーコードに配置します。Visual Studioのテストプロジェクトは、イベントやデリゲートに対処できますか?

私は新しくなっていますが、Visual Studioのテストプロジェクトは、完全なシステムを稼働させずに(テストハードウェアで最大30分かかることがあります)コードをテストできるという点で優れています。

私は自分のイベント処理コードを静的にテストしましたが、動的にしたいと思います。 これは可能ですか?もしそうなら、タイムアウトすることなくテストプロジェクトがイベントを待つようにするにはどうすればいいですか?

答えて

2

私が正しく理解している場合は、待機ハンドルを使用してイベントを通知し、テストプロジェクトがイベントハンドルが通知されるのを待たせることができます。

void Foo() 
{ 
    var eventSource = ...; 
    var waitHandle = new ManualResetEvent(false); 
    eventSource.SomeEvent += (sender, e) => waitHandle.Set(); 

    ... 

    // Wait for the event to be fired. 
    waitHandle.WaitOne(); 
} 
+0

私はあなたがこれで行くところを見ます。レガシータイマーによってトリガされた実際のイベントをキャプチャすると便利だとわかりますが、テスト対象のコード内でイベントハンドラをテストできるかどうかはわかりません。 私は、今日これに基づいていくつかのことをチェックしようと努力します。 ありがとうございます。 – ChrisBD

+0

イベントハンドラが期待どおりに動作することを確認するには、偽装する必要があります。リフレクションでイベントハンドラを呼び出すか、モックオブジェクトを使用して人為的にイベントを発生させます。 これはレガシーコードなので、TypeMock.NETを使用してイベントソースをモックし、人為的にイベントを発生させることができます。 –

関連する問題