2009-03-10 14 views
0

"最後のチャンス例外ハンドラ"で見つかったコードをカバーする単体テストを作成しようとしています。最後のチャンス例外処理のテスト

私はイベントのイベントハンドラについて話しています最後のチャンス例外処理を参照:

Application.ThreadException AppDomain.CurrentDomain.UnhandledException

多かれ少なかれ私は、ログが詳細生産されていることを確認しています例外によって生成された情報私のテストは、次のようなものです。

Exception Handlerは、 "Installed"が以前に与えられたイベントにハンドラを追加するだけのシングルトンです。奇妙なことは、私は一貫した結果がないということです。中断とデバッグは、例外とExceptionHandlerの間に入るように見えるため、オプションではないようです。

いくつかの "Console.WriteLine()"ステートメントをコード全体に配置して、コードがどこで失敗したかを確認しますが、これは一貫していません。私はそれがスレッドを殺すテストフレームワークか多分何らかのガベージコレクションと関係があると信じています。

誰もこのようなコードをテストした経験はありますか?それとも、私がなぜこのような行動を見ているのかについての洞察はありますか?

私はNUnit 2.4を使用しており、ReSharperを使用してIDEで実行しています。

答えて

2

を、あなたのスレッドは、常にそれをログに例外+を実行する時間を持っていない可能性があります。

スレッドに参加すると、スレッドが終了した後も続行されます。

Thread exceptionThread = new Thread(ThrowException); 
    exceptionThread.Start(); 
    exceptionThread.Join(); 
    //read stream, and rest of the test 

また、参加呼び出しでタイムアウトを設定することもできます。

+0

ありがとう、私はできるだけ早くこれを試みます。 –

1

スレッドが開始して終了する前にストリームから値を読み取ろうとしている可能性はありますか?この種のもののために

我々はループ(擬似コード)の内側に読み出されたストリーム置く:それは競合状態です

while (!timed out) { 
    read from stream; 
    if (message is in stream) { 
     set success flag; 
     break; 
    } 
    sleep; 
} 
if (!success flag) { 
    throw test failure; 
}