2016-07-10 5 views
5

重いウェブコントローラをクリーンアップするには、まずMediatRのテストを始めました。機能を実装するのは難しいことではありませんが、テストでは少し苦労します。MediatRでテストする方法

私は注文をキャンセルするためのコントローラメソッドを使い始めました。

注文がキャンセルされた場合、我々電子メールで通知を送信する監査ログ

  • で会議をキャンセルするデータベース
  • ログのデータに「キャンセル」フラグを設定する

    • ある監督に

    これはすべてコントローラメソッド内でトリガされ、コントローラはいくつかの異なるサービスに依存していました。テストの際に、私たちがテストしたい振る舞いを分離するために各部分を模擬しなければなりませんでした。

    これをMediatRで実装した方法は、コントローラメソッドからCancelOrder -queryを送出することでした。私はCancelOrderHandlerを作りました。それは 'cancelled'-フラグの記憶を担当しています。

    が例外をスローしない場合、私はOrderCancelled -notificationを発行します。

    この通知のハンドラは2つあります:OrderCancelledAuditLogHandlerOrderCancelledNotificationHandlerです。最初のものは監査ログを処理し、2番目のものは通知を送信します。

    各ハンドラはテストが簡単です。しかし、どのように私はすべてのフィット感が一緒にテストすることができますか?注文がキャンセルされたときに、監査ログと通知が実際に処理されることを確認したい。すべてのハンドラは、テスト実行(データベースの書き込みと電子メール送信)中に本当に欲しくないことを行います。私は本格的なエンドツーエンド統合テストに熱心ではありません。

    アイデア?

  • +0

    ハンドラのコードと発送方法などを投稿できますか? – Alex

    +0

    興味深いことは何もないと思います。私は[Bogards blog post](https://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a)のパターンを辿りました。 -mediator-pipeline /)を呼び出し、IoCコンテナを使用してすべての 'IRequestHandler <>'をポストイベントを送信するように装飾します。 – Vegar

    答えて

    1

    私は同じ問題を扱っています。ハンドラで個別に使用されている各コンポーネントをテストすることに傾いています。そして、それを構築します。何らかの形で、100%確かではありません。リクエストとハンドラを、Bogard氏のテストと同じ方法でテストします。 GitHubのMediatrプロジェクト

    +0

    私は特別な 'post-notification'ハンドラと何らかの'メッセージリレー 'を使って 'メッセージグラフ'を作ることを検討しています。そのため、ハンドラは、(イベント後ハンドラのような)メッセージの通知通知ハンドラとしてマークすることができ、そのようなハンドラは '別のメッセージを送る'ハンドラとして実装できます。私は、iocで見つかったクラスに基づいてハンドラの「連鎖」を構築し、それを主張できるようにしたいと考えています。実際にチェーンを実行するよりも優れていると思います。 – Vegar

    関連する問題