Quiero confirmar que mi clase "HomeController" está siendo seleccionada por la ruta que he creado. Así que tengo una prueba como esta:Unit Test MVC con ASP.NET Dev Server
[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"
//...
}
Se produce un error, diciendo que 'http://localhost:14478/home' completed successfully without running the test.
me di cuenta de que en la ventana de salida VS, también existe este mensaje No connection could be made because the target machine actively refused it 127.0.0.1:14478
. Pensé que Cassini no debería estar activa. Así que elegí lanzar el sitio que estaba siendo probado (ctrl + F5) antes de lanzar la prueba unitaria. Luego cambió la salida de VS a esto:
WebTestAdapter.ConnectToHostAdapter: se produjo una excepción inesperada. Microsoft.VisualStudio.TestTools.HostAdapters.AbortTestExecutionException: Error en la aplicación. en Microsoft.VisualStudio.TestTools.HostAdapters.WebTestAdapter.ConnectToHostAdapter()
Para tratar de resolver esto, he seguido los consejos de estos artículos:
- Debug while running a test in ASP.NET solution
- Unit Tests for ASP.NET web services: este discute el error "completado con éxito sin ejecutar una prueba".
- Configuring ASP.NET Unit Tests: Obtuve la idea $ (SolutionDir) de este artículo.
... pero sigo recibiendo el error sin importar lo que haga. Sugerencias?
ACTUALIZACIÓN/CLARIFICACION
Esta pregunta es no acerca de las pruebas rutas MVC. El propósito de esta pregunta es descubrir cómo hacer que ASP.NET MVC se inicialice correctamente para permitir más pruebas automatizadas "en profundidad". He elegido un escenario de "prueba de ruta", frente a DefaultControllerFactory, simplemente como un ejemplo. En este ejemplo, DefaultControllerFactory no se comporta correctamente a menos que ASP.NET MVC se inicialice correctamente.
El enfoque de Steven, expresado en el enlace que proporcionó, es absolutamente brillante. No podía esperar nada mejor. No responde mi pregunta de cómo puedo usar las anotaciones AspNetDevelopmentServerHost y HostType, pero hace algo equivalente o mejor, en lo que a mí respecta. –