2 Stimmen

Verwalten Sie Testdaten: Können Sie alle Datenbankverbindungen in eine einzige Transaktion einbinden?

Wir verwenden derzeit Watin, um UI-Tests für unsere Webanwendung durchzuführen. In der Tat machen wir Integrationstests von oben nach unten, da wir eine Testdatenbank und kein Mocking verwenden.

Um sicherzustellen, dass sich die Testdatenbank in einem erwarteten Zustand befindet, haben wir bisher die Snapshot-Funktion von SQL Server verwendet, um die Datenbank zu Beginn eines jeden Tests zurückzusetzen. Dies ist ziemlich langsam und führt außerdem unmittelbar nach der Wiederherstellung des Snapshots zu einem Fehler.

Da jeder der Tests die Benutzeroberfläche aufruft und möglicherweise mehrere Datenbankverbindungen verwendet, haben wir keine Möglichkeit, eine Transaktion für jede Verbindung zu starten.

Ich frage mich, ob es möglich ist, alle Datenbankverbindungen irgendwie an eine einzige Transaktion anzuhängen und sie zu einem späteren Zeitpunkt zurückzusetzen? Dies müsste wahrscheinlich auf der Ebene der Datenbank selbst geschehen.

Wenn jemand andere Vorschläge hat, wie wir unsere Testdaten für jeden UI-Test zurücksetzen können, würde ich gerne Ihre Ideen hören.

3voto

David M Punkte 69725

Wenn Sie loslegen, in Bearbeitung eine Instanz des Visual Studio-Entwicklungs-Webservers und führen Sie dann Ihren WatiN-Test aus, dann können Sie den Test wie folgt in einen einzelnen Block einpacken:

using (new TransactionScope())
{
    var server = new Server(PORT_NUMBER, VIRTUAL_PATH, PHYSICAL_PATH);
    server.Start();
    try
    {
        using (var ie = new IE())
        {
            // TODO: perform necessary testing using ie object
        }
    }
    finally
    {
        server.Stop();
    }
}

und alle Ihre Datenbankverbindungen werden theoretisch in eine einzige verteilte Transaktion eintreten und ihre Änderungen werden alle zurückgenommen, wenn der TransactionScope entsorgt wird.

Um den Dev-Webserver in Betrieb zu nehmen, müssen Sie WebDev.WebHost.dll aus dem GAC extrahieren und in Ihrem Projekt referenzieren - dies ist die Quelle der Server-Klasse im obigen Ausschnitt. Bitte lassen Sie mich wissen, wenn Sie genauere Anweisungen benötigen.

Sie müssen sicherstellen, dass MSDTC läuft, und wenn zwischen Ihnen und den Datenbanken Firewalls stehen, kann es je nach den Port-Einstellungen zu Problemen kommen. Ein zusätzlicher Bonus beim Starten des Servers ist, dass die WatiN-Tests nun zur Messung der Codeabdeckung beitragen können.

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