MediatR
複雑な Web コントローラーをクリーンアップするためのテストを開始したところです。機能自体を実装することはまったく難しくありませんが、テストには少し苦労しています。
注文をキャンセルするためのコントローラーメソッドから始めました。
注文がキャンセルされた場合、
- データベース内のデータに「キャンセル済み」フラグを設定する
- 誰が会議をキャンセルしたかを監査ログに記録する
- 一部のスーパーバイザーに電子メールで通知を送信します。
これらはすべてコントローラー メソッド内でトリガーされ、コントローラーは複数の異なるサービスに依存していました。テストするときは、各パーツをモックして、テストしたい動作を分離する必要がありました。
これを実装する方法は、コントローラー メソッドから -query を発行することでしたMediatR
。CancelOrder
次にCancelOrderHandler
、「キャンセル済み」フラグの保管を担当する を作成しました。
カスタムMediatorPipeline
実装を使用して、例外がスローされないOrderCancelled
場合は通知を発行します。CancelOrderHandler
この通知には、 と の 2 つのハンドラーがOrderCancelledAuditLogHandler
ありOrderCancelledNotificationHandler
ます。1 つ目は監査ログを処理し、2 つ目は通知を送信します。
各ハンドラは簡単にテストできます。しかし、すべてが「ぴったり合っている」ことをどのようにテストできますか? 注文がキャンセルされたときに、監査ログと通知が実際に処理されるようにしたいと考えています。すべてのハンドラーは、テストの実行中に私が本当に望んでいないこと (データベースの書き込みと電子メールの送信) を実行し、本格的なエンドツーエンドの統合テストには熱心ではありません。
何か案は?