2 Stimmen

Problem beim Unit-Test eines ASP.NET-Projekts (NullReferenceException beim Ausführen des Tests)

Ich versuche, eine Reihe von MS Visual Studio-Unit-Tests für meine n-tiered Web-App zu erstellen, aber aus irgendeinem Grund kann ich nicht diese Tests ausführen und ich erhalte den folgenden Fehler -

"Objektreferenz nicht auf eine Instanz eines Objekts"

Was ich versuche zu tun, ist die Prüfung meiner Datenzugriffsschicht, wo ich LINQ-Datenkontext-Klasse verwenden, um eine bestimmte Funktion auszuführen und ein Ergebnis zurückgeben, jedoch während der Debugging-Prozess fand ich heraus, dass alle Tests fehlschlagen, sobald Sie die LINQ-Datenkontext-Klasse erhalten und es hat etwas mit der Verbindungszeichenfolge zu tun, aber ich kippe herausfinden, was das Problem ist.

Das Debuggen von Tests schlägt hier fehl (die zweite Zeile):

public EICDataClassesDataContext() :
    base(global::System.Configuration.ConfigurationManager.ConnectionStrings["EICDatabaseConnectionString"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

Und mein Test sieht folgendermaßen aus:

TestMethod()]
    public void OnGetCustomerIDTest()
    {
        FrontLineStaffDataAccess target = new FrontLineStaffDataAccess(); // TODO: Initialize to an appropriate value
        string regNo = "jonh"; // TODO: Initialize to an appropriate value
        int expected = 10; // TODO: Initialize to an appropriate value
        int actual;
        actual = target.OnGetCustomerID(regNo);
        Assert.AreEqual(expected, actual);
    }

Die Methode, die ich von DAL aus aufrufe, ist:

 public int OnGetCustomerID(string regNo)
    {
        using (LINQDataAccess.EICDataClassesDataContext dataContext = new LINQDataAccess.EICDataClassesDataContext())
        {
            IEnumerable<LINQDataAccess.GetCustomerIDResult> sProcCustomerIDResult = dataContext.GetCustomerID(regNo);
            int customerID = sProcCustomerIDResult.First().CustomerID;

            return customerID;
        }
    }

So im Grunde alles fehlschlägt, nachdem es die 1. Zeile der DA-Schicht-Methode erreicht und wenn es versucht, die LINQ-Datenzugriffsklasse zu instanziieren...

Ich habe etwa 10 Stunden damit verbracht, das Problem zu beheben, aber ohne Ergebnis... Ich wäre für jede Hilfe dankbar!

UPDATE: Endlich habe ich das behoben!!!!:) Ich weiß nicht, warum, aber aus irgendeinem Grund in der app.config-Datei die Verbindung zu meiner Datenbank war wie folgt:

AttachDbFilename=|DataDirectory| \EICDatabase.MDF

Ich habe also einfach den Pfad geändert und anstelle von |DataDirectory| den tatsächlichen Pfad angegeben, in dem sich meine MDF-Datei befindet, d. h.

C:\Users\1\Documents\Visual Studio 2008 \Projects\EICWebSystem\EICWebSystem\App_Data\EICDatabase.mdf

Nachdem ich das getan hatte, funktionierte es, aber es ist immer noch nicht klar, was das Problem war... wahrscheinlich ein falscher Pfad zur Datenbank... Meine web.config des ASP.NET-Projekts enthält das |DataDirectory| \EICDatabase.MDF Weg aber

2voto

Vivian River Punkte 29806

Ist LINQDataAccess.EICDataClassesDataContext die web.config oder eine andere externe Datenquelle für die Einrichtung zu Rate ziehen?

Ich kann Ihnen mit Sicherheit sagen, dass Sie viele Hürden überwinden müssen, um eine web.config zugänglich für Ihren Testcode.

Update Ah, ja. Ich sehe, Sie verwenden ConfigurationManager in der Zeile, in der Ihr Test fehlschlägt... ConfigurationManager schaut für die Konfiguration in die web.config. Dies ist ein Knackpunkt für mich gewesen, wenn ich meine Tests schreibe.

Sie müssen entweder den Code so ändern, dass die Klasse ohne web.config instanziiert werden kann, oder Sie müssen es so einrichten, dass Ihre Tests auf web.config zugreifen können.

2voto

Gary.Ray Punkte 6201

Verfügt Ihr Testprojekt über eine eigene Konfigurationsdatei? Diese Art von Verhalten bedeutet in der Regel, dass die Anwendung die Verbindungszeichenfolge nicht finden kann. Testprojekte benötigen ihre eigene Datei, da sie nicht im Kontext der Client-Anwendung ausgeführt werden.

UPDATE Der von Ihnen beschriebene Fehler nach dem Hinzufügen einer app.config tritt häufig auf, wenn Sie auf SQLExpress basierende Webanwendungen testen und eine .mdf-Datei anhängen. SQLExpress kann nicht in mehr als einem Prozess gleichzeitig ausgeführt werden. Wenn Sie also Ihre Webanwendung zuvor ausgeführt haben, kann sie noch aktiv sein und mit dem Versuch, die Datenbank anzuhängen, in Konflikt geraten.

Sie können SQL Management Studio verwenden, um die Datenbank dauerhaft anzuhängen und dann eine herkömmliche Verbindungszeichenfolge wie

Server=myServer;Database=EICDatabase;Trusted_Connection=True;

0voto

Marks Punkte 3563

Für mich sieht es so aus, als ob Ihr Problem die Verbindungszeichenfolge ist, die nicht festgelegt ist. Ich nehme an, dass sich Ihr Unit-Test in einem anderen Projekt befindet als die DAL. Sie rufen den "new"-Befehl im Datentext-Konstruktor ohne eine Verbindungszeichenfolge auf. Normalerweise sollte er also den Standard verwenden, wenn er gesetzt ist. Da diese Einstellung aber normalerweise in der web.config des anderen Projekts gespeichert wird, ist kein Verbindungsstring gesetzt und Sie erhalten den Fehler.

Wenn es richtig ist, was ich annehme, müssen Sie die Einstellungen aus dem DAL-Projekt in das Unit-Testing-Projekt erhalten. Die einfachste Lösung sollte sein, web.config Verbindungszeichenfolge zu app.config von Unit-Test-Projekt zu kopieren.

Es gibt andere Möglichkeiten für sicher, aber ich denke, seine nicht einfach, die web.config-Konfiguration in Ihre Unit-Testing-Projekt zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X