Wie würden Sie gehen über eine Verbindungszeichenfolge Swapping eine Testdatenbank für Unit-Tests zugreifen?

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

Frage

Ich habe eine Testdatenbank zu beginnen Komponententests eine App einrichten, die ich vor kurzem hinzugefügt wurde. Es ist ein 3-Tier-Design (Präsentationsschicht, BOL und DAL) und dies ist meine erste Zeit mit dem Schreiben von Unit-Tests.

Ich habe in der BOL beginnen entschieden, und ich finde, der beste Weg, die Connectionstring zu tauschen ist mit einem (die zusammen als Shared String übergeben wurden), die zu meiner neuen Test-Datenbank verweisen. Allerdings möchte ich nicht jede Produktion Code ändern. Ich möchte einfach nur irgendwie die App auf die Testdatenbank während der Unit-Tests umleiten. Wie könnte ich dies zu erreichen gehen?

War es hilfreich?

Lösung

Was ich in der Regel tun ist, einen Konfigurationsabschnitt erstellen, die die Funktionalität, die Verbindungszeichenfolge zu verwenden, um zu bestimmen, halten.

Hier ist ein einfaches Beispiel:

static ConfigurationSettings
{
     static String ConnectionString
     {
        get
        {
           var result = "TESTCONNECTIONSTRING";
           if (ConfigurationManager.ConnectionStrings["SOMEKEY"] != null)
               result = ConfigurationManager.ConnectionStrings["SOMEKEY"];
           return result;
     }
}

Auf diese Weise, ich habe keine Sorgen zu machen, wie man das System anzuschließen, und Sie können dieses Verhalten auch in Ihren Tests außer Kraft zu erreichen, was Sie wollen durch eine Setter hinzufügen.

Der Grund, warum ich nicht den mehrere Konfigurationsdatei Weg gehen, ist, dass ich nicht die Konfigurationsdateien verwenden kann, wenn sie in einer Testsuite (wie die NUnit testrunner) ausgeführt wird.

Andere Tipps

Ist Ihre Verbindungszeichenfolge aus einer Konfigurationsdatei kommen? Können Sie eine passende Konfiguration in Ihren Unit-Tests einrichten?

Wie Sie wahrscheinlich sowieso bald lernen, statisch / Shared Code wird als böse in Unit-Tests für eine Reihe von Gründen. Einer dieser Gründe ist, dass es schwierig ist, die Werte während der Unit-Tests zu ändern.

Es ist eine viel bessere Idee, um Ihre Abhängigkeiten explizit auf Ihr System Under Test (SUT) zu passieren - vorzugsweise im Konstruktor. In Ihrem Fall sollten Sie die Verbindungszeichenfolge an das SUT über den Konstruktor übergeben.

Eine noch bessere Annäherung an abstrakte wäre die Data Access Layer hinter einer Schnittstelle entfernt und eine Instanz dieser Schnittstelle zum SUT übergeben.

Ich habe ein bisschen geschrieben über Imperative Konfiguration , aber in der Regel sollten Sie Roy Osherove Buch The Art of Unit Testing lesen - es handelt sich um eine Menge von diesen Fragen

.

Es ist eine gängige Praxis Verbindungszeichenfolgen in einer Konfigurationsdatei zu halten. Wenn Sie dies tun, dann nur verschiedene Konfigurationsdateien in verschiedenen Kontexten verwendet werden.

Es gibt eine Möglichkeit, auch wenn Sie dies nicht tun (aber Sie können Produktionscode ändern müssen). Lassen Sie die Verbindungszeichenfolge über Konstruktor oder einen Setter injiziert werden. Dann in Produktion verwenden Sie die Produktionsverbindungszeichenfolge; und in den Tests können Sie Ihre Testdatenbank verbinden.

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