9

MediatR複雑な Web コントローラーをクリーンアップするためのテストを開始したところです。機能自体を実装することはまったく難しくありませんが、テストには少し苦労しています。

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

注文がキャンセルされた場合、

  • データベース内のデータに「キャンセル済み」フラグを設定する
  • 誰が会議をキャンセルしたかを監査ログに記録する
  • 一部のスーパーバイザーに電子メールで通知を送信します。

これらはすべてコントローラー メソッド内でトリガーされ、コントローラーは複数の異なるサービスに依存していました。テストするときは、各パーツをモックして、テストしたい動作を分離する必要がありました。

これを実装する方法は、コントローラー メソッドから -query を発行することでしたMediatRCancelOrder次にCancelOrderHandler、「キャンセル済み」フラグの保管を担当する を作成しました。

カスタムMediatorPipeline実装を使用して、例外がスローされないOrderCancelled場合は通知を発行します。CancelOrderHandler

この通知には、 と の 2 つのハンドラーがOrderCancelledAuditLogHandlerありOrderCancelledNotificationHandlerます。1 つ目は監査ログを処理し、2 つ目は通知を送信します。

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

何か案は?

4

1 に答える 1

1

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

于 2016-07-26T00:33:02.370 に答える