0

ASP.NET MVC アプリケーションに変換する ASP.NET WebForms アプリケーションがあります。その理由の 1 つは、単体テストと TDD を最大限に活用できるようにするためです。

現在の WebForms アプリケーションでは、HttpModules を多用しています。現在、HttpModules をそのまま使用するか、グローバル フィルターを使用するかを検討しています (ここでアドバイスをいただければ幸いです)。

ただし、私のいくつかの "hello world" テスト MVC アプリケーションでは、単体テスト時に HttpModule (または実際にはグローバル フィルター) コードを起動する方法を考え出していませんでした。

たぶん私は間違っているかもしれませんが、これを単体テスト (統合テスト) の一部にする必要があるように思えます。

どんなガイダンスも大歓迎です。

ありがとう

グリフ

PS - 質問への最初の回答の後に次を追加しました。

シンプルなユースケース

生産中

  1. ブラウザーがコントローラー メソッドを要求する
  2. HttpModule が起動 (またはグローバル フィルター) - これにより、静的 Guid プロパティが値を持つように設定されます。
  3. コントローラー メソッドは、この Guid 値を受け取り、後続のロジックで使用します。
  4. 正しい結果がブラウザに返されます

単体テストで

  1. 単体テストは同じコントローラー メソッドを呼び出します
  2. HttpModule (またはグローバル フィルター) が起動しない - 静的 Guid プロパティの値が Guid.Empty である
  3. コントローラー メソッドはこの Guid 値を受け取りますが、空の Guid であるためエラーをスローします。
  4. 単体テストが失敗する

私の考えは次のとおりです。

  • コントローラーが最初に実行するために HttpModule (またはグローバル フィルター) に依存している場合、HttpModule は依存関係であるため、テストが真の単体テストであるためには、そのアクションの結果をスタブ化する必要があります。
  • テストに実行する HttpModule (またはグローバル フィルター) の効果を含める場合、これは統合テストになります (ただし、統合テストの一部として HttpModule またはグローバル フィルターを実行する方法はまだ明確ではありません)。
  • HttpModule (またはグローバル フィルター) には、独自の単体テストのセットが必要です。

これが私がとるアプローチだと思いますが、統合テスト(上記のように)を機能させる方法を誰かが提案できれば、とても感謝しています。

私が見ている問題は、テストを実行するときに TEST プロジェクトが「スタートアップ」プロジェクトになるため、HttpModules (ASP.NET MVC の web.config ファイルで定義されている) とグローバル フィルター (ASP.NET で定義されている) です。 web.config および global.asax ファイルが実行されないため、MVC の global.asax ファイル) は実行されません。したがって、問題は残ります。統合テストでこれらを実行するにはどうすればよいですか?

みんな、ありがとう

グリフ

4

3 に答える 3

4

グローバル フィルターが起動するかどうかをテストする必要はありません。コードを起動するメカニズムはあなたのコードではなく、フレームワークの一部であるため、フレームワーク チームがそれをテストすることになっています。

代わりに、グローバル フィルターが適用されていることを確認するためだけにテストする必要があります。

于 2012-04-04T16:38:51.533 に答える
2

HttpModule または Global Filter を呼び出すかどうかは、フレームワークによって処理されます。フレームワークによって処理される単体テストのことについて心配する必要はありません。単体テストでは、HttpModule または Global Filter が呼び出されたときに適切に動作することのみをテストする必要があります。

于 2012-04-04T16:31:14.553 に答える
1

私は http モジュールとリポジトリをモックして、コントローラーとサービスを単体テストします。私の見解では、それが単体テストの方法です。エンド ツー エンド テストでテストできるグローバル フィルターと httpmodules。それが役に立てば幸い。

于 2012-04-05T10:44:13.237 に答える