Ich teste eine .NET-Anwendung (.exe), die eine app.config-Datei zum Laden von Konfigurationseigenschaften verwendet. Die Unit-Test-Anwendung selbst verfügt nicht über eine app.config-Datei.
Wenn ich versuche, eine Methode zu testen, die eine der Konfigurationseigenschaften verwendet, geben sie null zurück . Ich gehe davon aus, dass dies daran liegt, dass die Unit-Test-Anwendung nicht in die app.config der Zielanwendung geladen wird.
Gibt es eine Möglichkeit, dies zu überschreiben, oder muss ich ein Skript schreiben, um den Inhalt der Ziel-app.config in eine lokale app.config zu kopieren?
Dieser Beitrag stellt diese Frage, aber der Autor betrachtet sie wirklich aus einem anderen Blickwinkel als ich.
EDIT: Ich sollte erwähnen, dass ich VS08 Team System für meine Unit-Tests verwende.
quelle
In Visual Studio 2008 habe ich die
app.config
Datei als vorhandenes Element zum Testprojekt hinzugefügt und eine Kopie als Link ausgewählt, um sicherzustellen, dass sie nicht dupliziert wird. Auf diese Weise habe ich nur eine Kopie in meiner Lösung. Bei mehreren Testprojekten ist es sehr praktisch!quelle
Unabhängig davon , ob Sie Team System Test oder NUnit verwenden , empfiehlt es sich, eine separate Klassenbibliothek für Ihre Tests zu erstellen. Durch einfaches Hinzufügen einer App.config zu Ihrem Testprojekt wird beim Kompilieren automatisch in Ihren bin-Ordner kopiert .
Wenn Ihr Code von bestimmten Konfigurationstests abhängt, bestätigt der allererste Test, den ich schreiben würde, dass die Konfigurationsdatei verfügbar ist ( damit ich weiß, dass ich nicht verrückt bin ):
Und der Test:
Idealerweise sollten Sie Code so schreiben, dass Ihre Konfigurationsobjekte an Ihre Klassen übergeben werden. Dies trennt Sie nicht nur vom Problem der Konfigurationsdatei, sondern ermöglicht Ihnen auch das Schreiben von Tests für verschiedene Konfigurationsszenarien.
quelle
Wenn Sie eine Lösung haben, die beispielsweise Webanwendung und Testprojekt enthält, möchten Sie wahrscheinlich, dass Testprojekt die web.config der Webanwendung verwendet.
Eine Möglichkeit, dies zu lösen, besteht darin, web.config zu kopieren, um das Projekt zu testen, und es in app.config umzubenennen.
Eine andere und bessere Lösung besteht darin, die Build-Kette zu ändern und eine automatische Kopie von web.config zu erstellen, um das Ausgabeverzeichnis des Projekts zu testen. Klicken Sie dazu mit der rechten Maustaste auf Anwendung testen und wählen Sie Eigenschaften aus. Jetzt sollten Sie Projekteigenschaften sehen. Klicken Sie auf "Build Events" und dann auf "Edit Post-Build ...". Schreiben Sie dort folgende Zeile:
Und klicken Sie auf OK. (Beachten Sie, dass Sie WebApplication1 höchstwahrscheinlich als Projektnamen ändern müssen, den Sie testen möchten.) Wenn Sie einen falschen Pfad zu web.config haben, schlägt das Kopieren fehl und Sie werden es während eines erfolglosen Builds bemerken.
Bearbeiten:
So kopieren Sie vom aktuellen Projekt in das Testprojekt:
quelle
.config
Dateien zu vermeiden . Danke für das Teilen! :)web.config
nur Verweise auf externe.config
Dateien innerhalb desselben Projekts haben? Da der Pfad nur auf Ordner im selben Verzeichnis verweisen kann (was normalerweise der Fall ist), kann er beim Ausführen von Tests diese externen Dateien nicht verarbeiten. Irgendeine Idee, wie man es löst?Das ist ein bisschen alt, aber ich habe eine bessere Lösung dafür gefunden. Ich habe hier die gewählte Antwort versucht, aber es sieht so aus, als ob .testrunconfig bereits veraltet ist.
1. Für Unit-Tests ist Wrap die Konfiguration eine Schnittstelle (IConfig)
Für Unit-Tests sollte config eigentlich nicht Teil Ihrer Tests sein. Erstellen Sie daher einen Mock, den Sie injizieren können. In diesem Beispiel habe ich Moq verwendet.
2. Fügen Sie für den Integrationstest die benötigte Konfiguration dynamisch hinzu
quelle
Das ist sehr einfach.
quelle
Wenn Sie NUnit verwenden, schauen Sie sich diesen Beitrag an . Grundsätzlich muss sich Ihre app.config im selben Verzeichnis wie Ihre .nunit-Datei befinden.
quelle
Wenn Ihre Anwendung Einstellungen wie Asp.net ConnectionString verwendet, müssen Sie Ihrer Methode das Attribut HostType hinzufügen. Andernfalls werden sie nicht geladen, selbst wenn Sie eine App.Config-Datei haben.
quelle
Ich verwende NUnit und habe in meinem Projektverzeichnis eine Kopie meiner App.Config, mit der ich eine Konfiguration ändere (Beispiel, ich leite zu einer Testdatenbank um ...). Sie müssen es im selben Verzeichnis des getesteten Projekts haben, und es wird Ihnen gut gehen.
quelle
Ich konnte keinen dieser Vorschläge für die Arbeit mit nUnit 2.5.10 erhalten, daher habe ich die Funktion "Projekt -> Bearbeiten" von nUnit verwendet, um die zu konfigurierende Konfigurationsdatei anzugeben (wie andere gesagt haben, muss sie sich im selben Ordner wie die befinden. Nunit-Datei selbst). Die positive Seite davon ist, dass ich der Konfigurationsdatei einen Test.config-Namen geben kann, der viel klarer macht, was es ist und warum es ist.
quelle
Ihre Komponententests werden als eine Umgebung betrachtet, in der Ihr Code zum Testen ausgeführt wird. Wie in jeder normalen Umgebung haben Sie dh Inszenierung / Produktion. Möglicherweise müssen Sie auch eine
.config
Datei für Ihr Testprojekt hinzufügen . Eine Problemumgehung besteht darin, eine Klassenbibliothek zu erstellen und in Test Project zu konvertieren, indem Sie die erforderlichen NuGet-Pakete wie NUnit und NUnit Adapter hinzufügen. Es funktioniert einwandfrei mit Visual Studio Test Runner und Resharper und Sie haben Ihreapp.config
Datei in Ihrem Testprojekt.Und schließlich debuggte mein Test und Wert von
App.config
:quelle