複雑な Asp.Net MVC-3 Web サイトの一部として、約 12 種類のメール フォームがあります。
各フォームには処理ロジックが大きく異なるため、フォームごとに FormsController 内に異なる ActionMethod があります。
各フォームには、1 つのルート マッピングで定義された URL でアクセスできます。
routes.MapRoute(
"Forms",
"forms/{action}",
new { controller = "Forms", action = "Index" }
);
私はアクション名のリストをリストに保持しています。これは、DRY の目的で設定されています (フォームのナビゲーションなどに入力するため)。この一連のフォームを頻繁に更新する必要があり、フォーム名が URL に表示される (したがって、アクション名として定義される) ようにリファクタリングしたい場合があります。リストが定義されたアクションメソッドの名前に対応することをテストしたい
各フォーム URL が正しいルート マッピングによってキャッチされるかどうかをテストするのは簡単です。MoqでNUnitを使用しています:
MockHttpContext.Setup(x => x.Request.AppRelativeCurrentExecutionFilePath)
.Returns("~/Forms/" + formUrlName);
var routeData = Routes.GetRouteData(MockHttpContext.Object);
Assert.AreEqual("Forms", routeData.Values["Controller"].ToString());
Assert.AreEqual(formUrlName, routeData.Values["Action"].ToString());
ただし、これは、指定されたアクション メソッド自体が Froms コントローラーで定義されていることを保証するものではありません。
また、注意: フォームの URL でダッシュを許可し、引き続きアクション メソッド名にマップするには、次のようにフィルターを使用してアクション名を定義しています。
[ActionName("blog-subscription-request")]
public ActionResult BlogSubscriptionRequest() {...
そう...
質問:アクション メソッド名のリスト内の各項目が、FormsController 内に存在する実際の ActionMethod に対応しているかどうかをテストするにはどうすればよいですか?**