作成したルートで「HomeController」クラスが選択されていることを確認したい。だから私はこのようなテストを持っています:
[TestMethod]
[UrlToTest("http://localhost:14478/home")]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("$(SolutionDir)\\MvcBuildApp")]
public void MyTest()
{
System.Diagnostics.Debugger.Break();
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
MvcApplication.RegisterGlobalFilters(GlobalFilters.Filters);
//This fetches DefaultControllerFactory (for now, anyway...)
var factory = ControllerBuilder.Current.GetControllerFactory();
//mock a context...
var httpContext = CreateHttpContext("http://localhost:14478/home", "GET");
RouteData route = routes.GetRouteData(httpContext);
var ctrlInstance = factory.CreateController(new RequestContext(httpContext, route), (string)route.Values["controller"]);
//ASSERT the instance is of type "HomeController"
//...
}
と言って失敗する'http://localhost:14478/home' completed successfully without running the test.
VS 出力ウィンドウにもこのメッセージがあることに気付きましたNo connection could be made because the target machine actively refused it 127.0.0.1:14478
。カッシーニは活動していないに違いないと考えました。そのため、単体テストを起動する前に、テスト対象のサイトを起動することを選択しました (ctrl + F5)。次に、VS 出力を次のように変更しました。
WebTestAdapter.ConnectToHostAdapter: 予期しない例外が発生しました。Microsoft.VisualStudio.TestTools.HostAdapters.AbortTestExecutionException: アプリケーションでエラーが発生しました。Microsoft.VisualStudio.TestTools.HostAdapters.WebTestAdapter.ConnectToHostAdapter() で
これを解決するために、次の記事のアドバイスに従いました。
- ASP.NET ソリューションでテストを実行しながらデバッグする
- ASP.NET Web サービスの単体テスト: 「テストを実行せずに正常に完了しました」というエラーについて説明します。
- ASP.NET 単体テストの構成: $(SolutionDir) のアイデアは、この記事から得ました。
...しかし、何をしてもエラーが発生します。提案?
更新/明確
化
この質問は、 MVC ルートのテストに関するものではありません。この質問の目的は、ASP.NET MVC を適切に初期化して、より「詳細な」自動テストを可能にする方法を見つけることです。単なる例として、DefaultControllerFactory に対して「ルート テスト」シナリオを選択しました。この例では、ASP.NET MVC が適切に初期化されていない限り、DefaultControllerFactory は適切に動作しません。