6

作成したルートで「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() で

これを解決するために、次の記事のアドバイスに従いました。

...しかし、何をしてもエラーが発生します。提案?

更新/明確
化 この質問は、 MVC ルートのテストに関するものではありません。この質問の目的は、ASP.NET MVC を適切に初期化して、より「詳細な」自動テストを可能にする方法を見つけることです。単なる例として、DefaultControllerFactory に対して「ルート テスト」シナリオを選択しました。この例では、ASP.NET MVC が適切に初期化されていない限り、DefaultControllerFactory は適切に動作しません。

4

2 に答える 2

1

これは、MVC アプリケーションをテストする際の一般的な要件です。幸運なことに、MVC コントローラーをテストする際の作業を簡素化するフレームワークがあります。

ツールは次のとおりです。

http://mvccontrib.codeplex.com/

例として、たった 1 行でテストを作成できます。

"~/".ShouldMapTo<HomeController>(controller => controller.Index());

参考として:

http://geekswithblogs.net/thomasweller/archive/2009/11/02/unit-testing-asp.net-mvc-routes.aspx

http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/

于 2012-05-08T02:47:53.703 に答える
0

Steve Sanderson の MVC テスト フレームワークのレビューに興味があるかもしれません。ソースをダウンロードすると、MVC フレームワークを初期化する方法の優れた例が得られます。

http://blog.codeville.net/2009/06/11/integration-testing-your-aspnet-mvc-application/

于 2012-05-08T20:18:57.460 に答える