Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET开发服务器进行单元测试MVC_C#_Asp.net_Asp.net Mvc_Visual Studio_Unit Testing - Fatal编程技术网

C# 使用ASP.NET开发服务器进行单元测试MVC

C# 使用ASP.NET开发服务器进行单元测试MVC,c#,asp.net,asp.net-mvc,visual-studio,unit-testing,C#,Asp.net,Asp.net Mvc,Visual Studio,Unit Testing,我想确认我创建的路由正在选择我的“HomeController”类。所以我有一个这样的测试: [TestMethod] [UrlToTest("http://localhost:14478/home")] [HostType("ASP.NET")] [AspNetDevelopmentServerHost("$(SolutionDir)\\MvcBuildApp")] public void MyTest() { System.Di

我想确认我创建的路由正在选择我的“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'在未运行测试的情况下成功完成。

我注意到在VS output窗口中,还有一条消息
无法建立连接,因为目标机器主动拒绝了它127.0.0.1:14478
。我想卡西尼号一定不活跃。因此,我选择在启动单元测试之前启动正在测试的站点(ctrl+F5)。然后将VS输出更改为:

WebTestAdapter.ConnectToHostAdapter:发生意外异常。 Microsoft.VisualStudio.TestTools.HostAdapters.AbortTestExecutionException异常: 应用程序中的错误。在 Microsoft.VisualStudio.TestTools.HostAdapters.WebTestAdapter.ConnectToHostAdapter()

为了解决这个问题,我遵循了以下文章的建议:

  • :这讨论了“未运行测试而成功完成”错误
  • :我从这篇文章中得到了$(SolutionDir)的想法
…但不管我做什么,我还是会出错。建议

更新/澄清

这个问题不是关于测试MVC路由的。这个问题的目的是了解如何正确初始化ASP.NET MVC,以允许进行更深入的自动化测试。我选择了一个针对DefaultControllerFactory的“路由测试”场景,仅作为示例。在本例中,除非ASP.NET MVC正确初始化,否则DefaultControllerFactory无法正常运行。

这是测试MVC应用程序时的常见要求,幸运的是,有一个框架可以简化您在测试MVC控制器时的生活:

这些工具是:

例如,您可以仅使用一行创建测试:

"~/".ShouldMapTo<HomeController>(controller => controller.Index());
“~/”.ShouldMapTo(controller=>controller.Index());
作为参考:


您可能有兴趣回顾Steve Sandersons的MVC测试框架。如果下载源代码,您将有一个关于如何初始化MVC框架的好例子:


我已经更新了我的问题,以澄清我实际上并没有询问路线测试。您会注意到,我的示例测试使用DefaultControllerFactory,并有一条关于替换该工厂的注释。一旦工厂被替换,您引用的MVCContrib TestHelper将不再对我有利。Steven的方法,在您提供的链接中表达出来,绝对是绝妙的。我几乎没有什么比这更好的了。它没有回答我如何使用AspNetDevelopmentServerHost和HostType注释的问题,但就我而言,它做了一些等效或更好的事情。