Wie können Sie mit „externen“ Konfigurationsdateien (das heißt mit configSource) mit einem MSTest Unit-Test-Projekt?

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Frage

Der Einfachheit halber ich teilten im Allgemeinen eine Menge meiner Konfiguration (das heißt, den Inhalt von app.config und web.config) aus in separate .config-Dateien, und sie dann von der Hauptkonfigurationsdatei verweisen auf die ‚configSource‘ Attribut. Zum Beispiel:

<appSettings configSource="appSettings.config"/>

und dann alle der Schlüssel / Wert-Paare in dieser Datei appSettings.config platzieren, anstatt diese in der Hauptkonfigurationsdatei in-line aufweist:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

Dies funktioniert in der Regel gut mit der Anwendung selbst, aber ich auf Probleme stoßen, wenn Unit-Tests zu schreiben versucht, die aus irgendeinem Grunde müssen zu einem bestimmten Wert aus einem Konfigurationsabschnitt zu erhalten, die in einem diesen externen Dateien gespeichert ist. (Ich verstehe, dass die meisten von ihnen würden likley „Integrationstests“ betrachtet werden, da sie auf dem Konfigurationssystem angewiesen sind, und ich habe „reine Unit-Tests“ als gut, aber das ist die nicht das Problem. Ich freue mich wirklich zu testen, ob diese Konfigurationswerte korrekt abgerufen werden und das Verhalten in der richtigen Art und Weise beeinflussen).

Aufgrund wie MSTest kompiliert und kopiert die Ausgabe verschleiert aussehende Ordner, die von jedem Testlauf unterschiedlich sind (und nicht auf die ‚bin‘ Ordner wie Sie vielleicht denken), es scheint nie in der Lage zu sein, diese externen Dateien zu finden während die Tests ausgeführt werden. Ich habe versucht, mit Post baut Aktionen rumgespielt diese Arbeit zu machen, aber ohne Glück. Gibt es eine Möglichkeit, diese externen Dateien zu haben, in die richtigen Ausgabeordner zur Laufzeit kopiert?

War es hilfreich?

Lösung

es gefunden:

Wenn Sie den Testlauf Konfiguration bearbeiten (durch Doppelklick auf die .testrunconfig Datei klicken, die in die ‚Lösung Items‘ Lösung Ordner abgelegt werden, wenn Sie einen neuen Unit-Test hinzufügen), können Sie einen Testlauf Konfigurationsdialog bekommen. Es gibt einen Abschnitt dort genannten ‚Deployment‘, wo Sie Dateien oder ganze Ordner von überall in der Lösung specifiy können, die mit den kompilierten Assemblys abgeschrieben zur Laufzeit in den richtigen Ordnern werden können.

Auf diese Weise kann ich jetzt nur noch tatsächlich die meisten meiner Konfiguration in einer Reihe von externen CONFIG-Dateien definieren und sie automatisch im Laufe der einzelnen Tests kopiert werden.

Andere Tipps

Testlauf Konfigurationen sind ein wenig umständlich, wenn Tests außerhalb von Visual Studio zu laufen versuchen.

Für Befehlszeilenausführung mit MSTest sie werden recht umständlich „sauber“ zu halten. Sie sind auch „global“ zu der Lösung so externe Dateien werden für jedes Test-Projekt kopiert werden.

Ich ziehe das DeploymentItem Attribut.

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

macht die Tests unabhängig von den .testrunconfig Dateien.

  1. schreibe dies in Ihrer Connection. Erste ConnectionString.config ist vorhanden nicht.

    < "connection configSource =" ConnectionString.config ">"

  2. open-Eingabeaufforderung (CMD) in Administrator privilegiert.

  3. Erstellen Sie einen symbolischen Link mit dem Namen ConnectionString.config in sind / Debug-Ordner.

C: \ Windows \ Systems32> mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"

schließlich schafft Connectionkonfigurationsdatei an der angegebenen Stelle. und arbeitet erfolgreich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top