Tests: ich *will* um zu testen, web.config
Ich will ein paar unit-Tests auf einem meiner Projekte. Dies ist ein web-Projekt, und es werden nur eine kopieren Sie dieses Programm laufen, abgesehen von der Entwicklung kopiert.
Möchte ich einige schreiben von unit-tests, die web.config
. Ich verstehe, dass normalerweise ein tester würde die stub diese externe Abhängigkeit, weil er will, um den code zu testen, ohne den test je nach web.config
holding bestimmte Werte.
Jedoch die web.config
in meinem Projekt soll halt immer bestimmte Werte und ich wollen ein Gerät testen, dass wird scheitern, wenn Sie ungültige Werte. Zum Beispiel, einer der Werte ist eine SQL-Verbindungszeichenfolge.
Möchte ich schreiben einen test, Lesen Sie die Verbindungszeichenfolge aus der web.config
. Ich Stelle mir vor, dass der test könnte eine Verbindung zu einem server mit dem connection-string und vielleicht führen Sie ein sehr einfaches Kommando wie SELECT system_user;
. Wenn der Befehl erfolgreich ausgeführt wird und gibt etwas, das der test bestanden wird. Sonst scheitert Sie. Ich möchte den connection string zu Lesen, von der web.config
in das Projekt, das ich Teste.
Natürlich, die ConfigurationManager
wird normalerweise nicht Aussehen für ein web.config
in einem anderen Projekt. Ich könnte manuell kopieren Sie die web.config
aus dem ursprünglichen Projekt test Projekt, aber ich würde zu tun haben, dass vor jedem test und es gibt keine Weise, die ich zählen konnte, auf jemand anderes zu tun.
Wie mache ich mein test-Projekt Lesen Sie die web.config
aus einem anderen Projekt?
- Gibt es eine bessere Lösung als das kopieren der config auf das test-Projekt, goto vorhandenes Element hinzufügen und wählen Sie die web -.config anstelle des Klickens auf die Schaltfläche hinzufügen klicken Sie auf den Pfeil daneben und wählen Sie als link. Jetzt Ihre test-Projekt hat die live-Kopie der web.config als ein symbolischer link ist.
- Chris, ich versuchte Ihren Vorschlag und so wie ich vermutete, es macht eine Kopie der Datei in das Verzeichnis für die unit-test-Projekt; das ist es, was ich vermeiden wollte.
- Was ist dein end-game hier? "So, Dass..." Teil der use-case. Können Sie setzen eine Menge Anstrengungen in die Prüfung etwas, was komplett überflüssig ist, weil es nicht kaufen man Vertrauen. Die config-Datei ist dynamisch, indem es die Natur, und die Aktualisierung kann es eine Forderung on-the-fly. Allerdings haben Sie die tests nun scheitern, weil Sie erwartet hatten, dass einige Wert. Vielleicht, wenn Sie erklären könnten, "Warum" Sie dies tun, könnten wir besser helfen, einen plan auszuarbeiten, der für die Prüfung.
- Ja, Josh, die
web.config
- Datei ist dynamisch. Es wird jedoch nur eine Instanz dieser Anwendung läuft in der Produktion. Wünsche ich mir einen unit test ruft die Verbindungszeichenfolge aus derweb.config
und überprüft, ob es gültig ist. Ja, dieweb.config
ist technisch dynamische, aber in der Praxis nicht verändert werden, sobald es bereitgestellt wird. - Es macht eine Kopie von der config, es erstellt einen symbolischen link. Dies bedeutet, dass Ihre test-Projekt sieht die Datei genau so, als ob es war dort, aber nicht physisch im Projekt vorhanden ist. (es ist allerdings kopiert das build-Verzeichnis nach dem compilieren)
- Danke Chris, ich sehe, dass ich verpasste die "add as link"Teil
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie versuchen zu überprüfen der Einstellungen in web.config, das ist ein Bereitstellung-Ebene betreffen, und unterscheidet sich von unit-Tests.
Unit-Tests erzählt Sie, dass Ihre core-Logik erwartungsgemäß; Bereitstellung überprüfung sagt Ihnen, dass das Programm wurde korrekt installiert und konfiguriert ist und sichere Verwendung. Unit-tests sind sinnvoll für die Entwickler, deployment-überprüfung ist sinnvoll, um die end-user oder administrator, die ist die Bereitstellung der app.
In der situation wie dieser, ich mag Sie bauen ein "system console" in meinen apps. Diese Konsole enthält eine Reihe von Selbstdiagnose-Prüfungen wie:
Empfehle ich Ihnen, betrachten die Trennung dieser Art von Konfigurations-und deployment-überprüfung von Ihrem unit-test-suite. Es wird nicht nur Ihre Arbeit zu vereinfachen (weil Sie nicht haben zum laden einer config Datei aus einem anderen Projekt), aber es ist auch die Art von Werkzeug, die Kunden, wirklich, wirklich gerne 🙂
web.config
ist genauso Teil des Projekts wie alle Ihre code-Dateien. Deshalb möchte ich in der Lage sein, um es zu testen mit einem connection-string abgerufenweb.config
nur, als ob es zur Laufzeit abgerufen.web.config
zu dem test-Projekt, aber ich merke, dass dann gibt es das Problem, dass die check-out web.config in das test-Projekt vor dem ausführen von tests... ich kann schauen, in dieser. Mein Vorgesetzter wünscht, dass dies ein unit-test Teil, weil es einfach im Laufe des tests als Teil eines build. So, wir wissen würden, wenn das nightly-build ausgeführt wird, dass jemand set eine ungültige Verbindungszeichenfolge in der web.configLaden Sie und entdecken Sie andere config-Dateien mit den ConfigurationManager.OpenXXX() Methoden.
Den
WebConfigurationManager
Klasse explizit eine Methode zum öffnen von web.config-Dateien und die Dokumentation, die Seite habe ich verlinkt, um einige code-Beispiele. Sobald Sie Ihre Konfiguration-Objekt geladen haben, können Sie entdecken es für die Sektionen und Schlüssel.web.config
. Es wirft exception wenn ich versuche, einen relativen Pfad verwendenStellte ich eine ähnliche Frage, möchten Sie vielleicht check out:
Wie kann ich testen, dass alle meine erwarteten web.config-Einstellungen definiert wurden?
Ich landete immer es funktioniert, aber der lästige Teil ist meine source control ständig die Verriegelung der config-Datei übernommen. Sie können auch umbenennen das web.config app.config, so dass es wird die Kompilierung in einer nicht-web-Projekt.
Es klingt wie Sie versuchen, squash, eine Mücke mit einem Vorschlaghammer. Warum nicht tun Sie dies manuell, als Teil der Bereitstellung-Checkliste; eine Aufgabe manuell bestätigen Sie die connectionString.
Oder wenn Sie automatisieren möchten, ist es, ein Programm zu schreiben, prüfen des connectionString, fügen Sie es Ihrem Continuous-Integration-server (vorausgesetzt, Sie eine haben) und nicht das bauen, wenn der connectionString falsch ist.
Verwenden Sie Unit-Tests für das, was Sie sind vorgesehen für das testen von code, nicht die Konfiguration.
Wenn Sie möchten, verwenden Sie die ursprüngliche web.config-Datei von Ihrer website zu Ihrem Unit-Test-Projekt, ohne Sie zu kopieren, dann können Sie Ändern, VS Local-Test-Einstellungen.
Hier ist eine Schritt-für-Schritt-Verfahren zu verwenden ASP.net website-Konfiguration-Datei unter Unit-Test-Projekt. Folgen Sie dem link http://forums.asp.net/t/1454799.aspx/1
Gibt es ein kommerzielles tool namens
CheckMyConfig
für die Validierung.NET
config-Dateien, identifiziert, die Einstellungen innerhalb eines bestimmten config Datei, und versuche, Sie zu bestätigen.Mögliche Einstellung Arten gehören die Datenbank-connection-strings, Dateien, Ordner, IP-Adressen, Hostnamen und URLs.
Dem tool können Sie führen eine Reihe von Prüfungen, einschließlich der Eröffnungs-Datenbank-verbindungen, Zugriff auf Ordner, um eine bestimmte URL, etc.
Gibt es eine standalone-version, aber das tool hat auch Visual Studio-integration und eine einfache API, die Sie verwenden können, um Betten Sie das tool in Ihre eigenen apps, um
zum durchführen einer config
'sanity check'
bei app-Start-Zeit.In der unit Test-Projekt, fügen Sie eine app.config-Datei und fügen Sie die Einstellungen aus dem web.config-Datei, die Sie verwenden möchten, um für Ihre tests.