使用ASP.NET Dev Server进行MVC单元测试

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' 完成测试但未运行。

我在 VS 输出窗口中注意到了这条信息:No connection could be made because the target machine actively refused it 127.0.0.1:14478。我想 Cassini 可能未被激活。因此我选择在启动单元测试前先启动正在测试的站点(Ctrl + F5)。然后输出变为了:

WebTestAdapter.ConnectToHostAdapter: 发生意外异常。 Microsoft.VisualStudio.TestTools.HostAdapters.AbortTestExecutionException: 应用程序出错。 at Microsoft.VisualStudio.TestTools.HostAdapters.WebTestAdapter.ConnectToHostAdapter()

为尝试解决此问题,我遵循了以下文章中的建议:

但无论我做什么,错误仍然存在。有什么建议吗?

更新/澄清
这个问题并不是关于测试 MVC 路由。本问题的目的在于发现如何使 ASP.NET MVC 正确初始化以允许更加“深度”的自动化测试。我仅以默认控制器工厂为例进行了“路由测试”。在本例中,除非 ASP.NET MVC 已正确初始化,否则 DefaultControllerFactory 将无法正常运行。

2个回答

1

我已经更新了我的问题,澄清我实际上并不是在询问路由测试。您会注意到我的示例测试使用了DefaultControllerFactory,并有一个关于替换该工厂的注释。一旦工厂被替换,您提到的MVCContrib TestHelper将不再对我有益。 - Brent Arias

0

史蒂文在你提供的链接中的方法非常棒。我几乎不能希望得到更好的方法了。虽然它没有回答我如何使用AspNetDevelopmentServerHost和HostType注释的问题,但它提供了等效或更好的解决方案 - 在我看来是这样。 - Brent Arias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接