2009-04-25 38 views
7

Ho cercato di imparare ASP.NET MVC utilizzando i video pubblicati su ASP.NET website e sto riscontrando un problema durante il test delle unità.Test di unità MVC ASP.NET con NUnit

Ho una molto semplice controller che utilizza LINQ to SQL per ottenere un array di oggetti:

public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     using (TrainingLogDataContext dc = new TrainingLogDataContext()) 
     { 
      ViewData.Model = dc.Workouts.ToArray(); 
     } 

     return View(); 
    } 

Ciò non è riuscito a NUnit con il seguente errore:

at TrainingLog.Models.TrainingLogDataContext..ctor() in C:\Webs\TrainingLog\TrainingLog\Models\TrainingLog.designer.cs:line 41 
at TrainingLog.Controllers.HomeController.Index() in C:\Webs\TrainingLog\TrainingLog\Controllers\HomeController.cs:line 16 
at TrainingLogTests.Controllers.HomeControllerTest.Index() in C:\Webs\TrainingLog\TrainingLog.Tests\Controllers\HomeControllerTest.cs:line 23 

Credo che il problema è che NUnit impossibile ottenere la stringa di connessione per DataContext da web.config. Qual è il modo migliore per aggirare questo?

Funziona correttamente quando si esegue la pagina, ma il test dell'unità non riesce in NUnit.

risposta

3

Il problema che ho preso è stato quello di prendere in giro il contesto dei dati. Uso una fabbrica per creare il contesto dati e inserirla nel controller. Se il factory è nullo (che è ciò che accade quando viene chiamato il costruttore senza parametri), crea un'istanza predefinita della factory che si connette al database. Nei miei test unitari, utilizzo uno stabilimento che crea un contesto di dati falsi che funziona in memoria. Ho basato il mio contesto di dati fittizi sul codice da this blog, sebbene l'abbia esteso per gestire gli oggetti aggiunti al database tramite i set di entità.

Se non si vuole seguire la via del mock (e lo consiglierei, anche se ci vorrà un po 'di lavoro in anticipo). È possibile aggiungere un file app.config al progetto di test dell'unità e inserire le stringhe di connessione per il contesto dati in esso contenuto.

0

Il metodo più semplice è quello di avere NUnit installato prima di installare ASP.NET MVC e quindi impostare il progetto di test quando si crea l'ASP.NET MVC progetto. È quindi possibile creare gli elementi di configurazione necessari per fare ciò che si sta tentando.

NOTA: il modo migliore per lavorare con i dati è quello di deriderlo, il che significa che è necessario spostare il LINQ dal controller, poiché non è possibile invertire facilmente il controllo su un controller.

5

Copiare le stringhe di connessione nel progettoweb.config per app.config nel progetto di test NUnit.

+1

funziona per me, grazie :) – melaos

1

E 'meglio non per accedere a un database dal test di unità come questo si tradurrà nei test che vengono eseguiti così lentamente che vi fermerete preoccuparsi di eseguire i test. Ma se vuoi farlo puoi creare un file app.config nel tuo progetto NUnit e posizionare la stringa di connessione lì. A volte NUnit non riconosce il file app.config, ma maggiori dettagli su come configurarlo in modo che non può essere trovato nelle risposte a "How to initialize ConnectionStrings collection in NUnit".

Problemi correlati