2012-05-07 26 views
6

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:

... 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.

risposta

0

Potreste essere interessati a rivedere framework di test Steve Sandersons MVC.Se si scarica la fonte si avrà un grande esempio di come inizializzare il framwork MVC:

http://blog.codeville.net/2009/06/11/integration-testing-your-aspnet-mvc-application/

+0

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. –

1

Si tratta di un requisito comune durante il test di applicazioni MVC, e fortunato, c'è un quadro che semplificherà la vita durante il test controller MVC:

Gli strumenti è:

http://mvccontrib.codeplex.com/

E ad esempio è possibile creare test con una sola riga:

"~/".ShouldMapTo<HomeController>(controller => controller.Index()); 

come riferimento:

http://geekswithblogs.net/thomasweller/archive/2009/11/02/unit-testing-asp.net-mvc-routes.aspx

http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/

+0

Ho aggiornato la mia domanda per chiarire che non sto davvero chiedendo di test percorso. Noterai che il mio test di esempio utilizza DefaultControllerFactory e ha un commento sulla sostituzione di tale factory. Una volta che la fabbrica è stata sostituita, MVCContrib TestHelper a cui si è fatto riferimento non mi sarà più utile. –

Problemi correlati