Voglio confermare che la mia classe "HomeController" è stata selezionata dalla rotta che ho creato. Così ho un test come questo:Test unità MVC con server ASP.NET Dev
[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"
//...
}
Non riesce, dicendo che 'http://localhost:14478/home' completed successfully without running the test.
ho notato che nella finestra di output VS, c'è anche questo messaggio No connection could be made because the target machine actively refused it 127.0.0.1:14478
. Ho pensato che Cassini non doveva essere attivo. Così ho scelto di avviare il sito in fase di test (ctrl + F5) prima di lanciare il test unitario. A questo punto l'output VS è stato modificato:
WebTestAdapter.ConnectToHostAdapter: si è verificata un'eccezione imprevista. Microsoft.VisualStudio.TestTools.HostAdapters.AbortTestExecutionException: Errore nell'applicazione. a Microsoft.VisualStudio.TestTools.HostAdapters.WebTestAdapter.ConnectToHostAdapter()
Per cercare di risolvere questo, ho seguito il consiglio di questi articoli:
- Debug while running a test in ASP.NET solution
- Unit Tests for ASP.NET web services: questo discute l'errore "completato correttamente senza eseguire un test".
- Configuring ASP.NET Unit Tests: Ho ricevuto l'idea $ (SolutionDir) da questo articolo.
... ma ho ancora l'errore, non importa quello che faccio. Suggerimenti?
UPDATE/CHIARIFICAZIONE
Questa domanda non è sui test percorsi MVC. Lo scopo di questa domanda è scoprire come rendere ASP.NET MVC correttamente inizializzato per consentire più test automatici "in profondità". Ho scelto uno scenario di "test del percorso", contro DefaultControllerFactory, solo a titolo di esempio. In questo esempio, DefaultControllerFactory non si comporta correttamente a meno che ASP.NET MVC non sia inizializzato correttamente.
L'approccio di Steven, espresso nel link che hai fornito, è assolutamente geniale. Non potevo quasi sperare in qualcosa di meglio. Non risponde alla mia domanda su come posso usare le annotazioni AspNetDevelopmentServerHost e HostType, ma fa qualcosa di equivalente o migliore - per quanto mi riguarda. –