重いウェブコントローラをクリーンアップするには、まずMediatR
のテストを始めました。機能を実装するのは難しいことではありませんが、テストでは少し苦労します。MediatRでテストする方法
私は注文をキャンセルするためのコントローラメソッドを使い始めました。
注文がキャンセルされた場合、我々電子メールで通知を送信する監査ログ
- ある監督に
これはすべてコントローラメソッド内でトリガされ、コントローラはいくつかの異なるサービスに依存していました。テストの際に、私たちがテストしたい振る舞いを分離するために各部分を模擬しなければなりませんでした。
これをMediatR
で実装した方法は、コントローラメソッドからCancelOrder
-queryを送出することでした。私はCancelOrderHandler
を作りました。それは 'cancelled'-フラグの記憶を担当しています。
が例外をスローしない場合、私はOrderCancelled
-notificationを発行します。
この通知のハンドラは2つあります:OrderCancelledAuditLogHandler
とOrderCancelledNotificationHandler
です。最初のものは監査ログを処理し、2番目のものは通知を送信します。
各ハンドラはテストが簡単です。しかし、どのように私はすべてのフィット感が一緒にテストすることができますか?注文がキャンセルされたときに、監査ログと通知が実際に処理されることを確認したい。すべてのハンドラは、テスト実行(データベースの書き込みと電子メール送信)中に本当に欲しくないことを行います。私は本格的なエンドツーエンド統合テストに熱心ではありません。
アイデア?
ハンドラのコードと発送方法などを投稿できますか? – Alex
興味深いことは何もないと思います。私は[Bogards blog post](https://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a)のパターンを辿りました。 -mediator-pipeline /)を呼び出し、IoCコンテナを使用してすべての 'IRequestHandler <>'をポストイベントを送信するように装飾します。 – Vegar