2009-04-25 13 views
7

Ich habe versucht, mit den Videos auf der ASP.NET website geschrieben zu lernen, und ich stoße auf ein Problem beim Komponententest.ASP.NET MVC-Unit-Tests mit NUnit

Ich habe eine sehr einfache Steuerung, die LINQ to SQL ein Array von Objekten zu erhalten verwendet:

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

     return View(); 
    } 

Dies mit dem folgenden Fehler in NUnit fehlschlägt:

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 

Ich denke, das Problem ist, dass NUnit Die Verbindungszeichenfolge für den DataContext kann nicht von web.config abgerufen werden. Was ist der beste Weg, um dies zu umgehen?

Es funktioniert gut, wenn ich die Seite ausführen, aber der Komponententest fehlschlägt in NUnit.

Antwort

3

Die Wende, die ich nahm, war, den Datenkontext zu verspotten. Ich benutze eine Fabrik, um den Datenkontext zu erstellen und in den Controller zu injizieren. Wenn die Factory null ist (was beim Aufruf des parameterlosen Konstruktors passiert), wird eine Standardinstanz der Factory erstellt, die eine Verbindung zur Datenbank herstellt. In meinen Komponententests verwende ich eine Factory, die einen falschen Datenkontext erstellt, der im Speicher funktioniert. Ich habe meinen Scheindatenkontext auf Code von this blog gestützt, obwohl ich ihn erweitert habe, um Objekte zu behandeln, die über Entitätssätze zur Datenbank hinzugefügt wurden.

Wenn Sie nicht die falsche Route gehen wollen (und ich würde es empfehlen, obwohl es einige Arbeit im Voraus zu nehmen). Sie können Ihrem Einheitentestprojekt eine app.config-Datei hinzufügen und die Verbindungszeichenfolgen für Ihren Datenkontext darin einfügen.

0

Am einfachsten ist es zu haben NUnit, bevor Sie installiert installieren ASP.NET MVC und dann das Testprojekt einrichten, wenn Sie die ASP.NET MVC erstellen Projekt. Sie können dann die Konfigurationselemente erstellen, die für das, was Sie versuchen, erforderlich sind.

HINWEIS: Der beste Weg, um mit Daten zu arbeiten, ist, es zu verspotten, was bedeutet, dass Sie Ihren LINQ aus Ihrem Controller entfernen müssen, da Sie die Kontrolle über einen Controller nicht einfach invertieren können.

5

Kopieren Sie Ihre Verbindungszeichenfolgen in dem web.config Projekt app.config in Ihrem nunit Testprojekt.

+1

funktioniert für mich, danke :) – melaos

1

Es ist am besten, nicht auf eine Datenbank von Ihren Komponententests zuzugreifen, da dies zu Tests führen wird, die so langsam ausgeführt werden, dass Sie aufhören, sich zu bemühen, die Tests auszuführen. Wenn Sie dies jedoch tun möchten, können Sie eine app.config-Datei in Ihrem NUnit-Projekt erstellen und Ihre Verbindungszeichenfolge dort platzieren. Manchmal erkennt NUnit diese Datei app.config nicht, aber weitere Details zur Konfiguration finden Sie in den Antworten auf "How to initialize ConnectionStrings collection in NUnit".