2

メッセージの特定のインスタンスを処理すると処理が失敗することをテストしたいと思います。ただし、ハンドラー内でスローされた例外はテストコードにバブルアップされず、これには何も組み込まれていないように見えるため、これを行う方法がわかりません。

理想的には、私はこれをしたいと思います:

Test.Handler<TransactionCreatedHandler>()
                    .ExpectFailure()
                    .OnMessage(financialTransaction, Guid.NewGuid().ToString());

ハンドラーから処理コードを削除し、それを個別にテストするのが正しいことはわかっていますが、これを行う方法があるかどうかを知りたいです。

誰にもアイデアはありますか?

4

1 に答える 1

2

Test.Handler を try でラップして をキャッチしTargetInvocationException、 に対してアサートすることで、この動作を回避しましたInnerException

try
{
    Test.Handler<TransactionCreatedHandler>()
        .OnMessage(financialTransaction, Guid.NewGuid().ToString());
}
catch (TargetInvocationException ex)
{
    // Asserts against ex.InnerException
    ...
}

これは明らかに、NSB 実装への変更がこれらのテストを破るリスクを生み出しますが、それは私が喜んで引き受けるものです。

Daniel Marbachからのコメントを組み込む:

バージョン 5 以降では、動作が変更されました。テスト ライブラリは、TargetInvocationException をスローしなくなりましたが、ハンドル メソッドで発生した実際の例外をスローします。ただ注意してください–

于 2013-09-16T15:04:41.377 に答える