我想确认我创建的路线正在选择我的“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 不会正常运行。