ASP.NET MVC アプリケーションに変換する ASP.NET WebForms アプリケーションがあります。その理由の 1 つは、単体テストと TDD を最大限に活用できるようにするためです。
現在の WebForms アプリケーションでは、HttpModules を多用しています。現在、HttpModules をそのまま使用するか、グローバル フィルターを使用するかを検討しています (ここでアドバイスをいただければ幸いです)。
ただし、私のいくつかの "hello world" テスト MVC アプリケーションでは、単体テスト時に HttpModule (または実際にはグローバル フィルター) コードを起動する方法を考え出していませんでした。
たぶん私は間違っているかもしれませんが、これを単体テスト (統合テスト) の一部にする必要があるように思えます。
どんなガイダンスも大歓迎です。
ありがとう
グリフ
PS - 質問への最初の回答の後に次を追加しました。
シンプルなユースケース
生産中
- ブラウザーがコントローラー メソッドを要求する
- HttpModule が起動 (またはグローバル フィルター) - これにより、静的 Guid プロパティが値を持つように設定されます。
- コントローラー メソッドは、この Guid 値を受け取り、後続のロジックで使用します。
- 正しい結果がブラウザに返されます
単体テストで
- 単体テストは同じコントローラー メソッドを呼び出します
- HttpModule (またはグローバル フィルター) が起動しない - 静的 Guid プロパティの値が Guid.Empty である
- コントローラー メソッドはこの Guid 値を受け取りますが、空の Guid であるためエラーをスローします。
- 単体テストが失敗する
私の考えは次のとおりです。
- コントローラーが最初に実行するために HttpModule (またはグローバル フィルター) に依存している場合、HttpModule は依存関係であるため、テストが真の単体テストであるためには、そのアクションの結果をスタブ化する必要があります。
- テストに実行する HttpModule (またはグローバル フィルター) の効果を含める場合、これは統合テストになります (ただし、統合テストの一部として HttpModule またはグローバル フィルターを実行する方法はまだ明確ではありません)。
- HttpModule (またはグローバル フィルター) には、独自の単体テストのセットが必要です。
これが私がとるアプローチだと思いますが、統合テスト(上記のように)を機能させる方法を誰かが提案できれば、とても感謝しています。
私が見ている問題は、テストを実行するときに TEST プロジェクトが「スタートアップ」プロジェクトになるため、HttpModules (ASP.NET MVC の web.config ファイルで定義されている) とグローバル フィルター (ASP.NET で定義されている) です。 web.config および global.asax ファイルが実行されないため、MVC の global.asax ファイル) は実行されません。したがって、問題は残ります。統合テストでこれらを実行するにはどうすればよいですか?
みんな、ありがとう
グリフ