我希望确认我的“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()
为尝试解决此问题,我遵循了以下文章中的建议:
- 运行 ASP.NET 解决方案时进行测试调试
- ASP.NET Web 服务的单元测试:讨论了“完成测试但未运行”的错误。
- 配置 ASP.NET 单元测试:我从这篇文章中获得了 $(SolutionDir) 的思路。
但无论我做什么,错误仍然存在。有什么建议吗?
更新/澄清
这个问题并不是关于测试 MVC 路由。本问题的目的在于发现如何使 ASP.NET MVC 正确初始化以允许更加“深度”的自动化测试。我仅以默认控制器工厂为例进行了“路由测试”。在本例中,除非 ASP.NET MVC 已正确初始化,否则 DefaultControllerFactory 将无法正常运行。