Ich versuche, eine Methode zum Arbeiten mit einer Testdatenbank (in SQL Server) für unsere Integrationstests zu definieren.
Meine Idee war, diese Schritte beim Start der Integrationstest-Assembly auszuführen:
- Erstellen Sie eine völlig leere Datenbank
- Führen Sie das Skript "Datenbankobjekte erstellen" aus, um alle relevanten Datenbankobjekte (Tabellen, Ansichten, Sequenzen usw.) zu erstellen.
- Füllen Sie die "Basisdaten" (Nachschlagewerte usw.)
- Erstellen Sie einen Datenbank-Snapshot, der
(db)_Basis
als "Basislinie" für zukünftige Integrationstests bezeichnet wird
Jetzt plante ich vor jeder Testklasse (die 1-n-Tests enthielt) einfach eine "Wiederherstellung aus dem Snapshot", um wieder in den gut definierten, mehr oder weniger "leeren" Zustand der Datenbank zu gelangen. Funktioniert bisher wie ein Zauber.
Es gibt jedoch eine Reihe von Integrationstests, die auf einer großen Testdatenbank ausgeführt werden müssen. Daher hatte ich die Hoffnung, dies vor jedem dieser Testgeräte zu tun (Klassen mit n Einzeltests).
- Datenbank aus dem
(db)_Basis
Snapshot wiederherstellen - Fügen Sie diese über 50'000 Datenzeilen in die Datenbank ein
- Erstellen Sie einen weiteren
(db)_With_Testdata
Schnappschuss
Setzen Sie dann für jeden Test die Datenbank auf die gut definierte (db)_With_Testdata
Snapshot-Version zurück, führen Sie die Tests aus, überprüfen Sie das Ergebnis und so weiter.
Das Problem ist, dass anscheinend nicht zwei Datenbank-Snapshots gleichzeitig vorhanden sind. Wenn dies der Fall ist, kann keine der beiden Datenbanken wiederhergestellt werden. Es wird immer wieder der folgende Fehler angezeigt:
Meldung 3137, Ebene 16, Status 4, Zeile 9 Die
Datenbank kann nicht zurückgesetzt werden. Entweder der primäre Name oder der Name des Snapshots sind falsch angegeben, alle anderen Snapshots wurden nicht gelöscht oder es fehlen Dateien.Meldung 3013, Ebene 16, Status 1, Zeile 9
DATENBANK WIEDERHERSTELLEN wird abnormal beendet.
Funktionieren SQL Server-Datenbank-Snapshots wirklich so? Scheint schrecklich einschränkend ..... Ich würde verstehen, wenn ich nicht direkt zum ursprünglichen "(db) _Basis" -Snapshot zurückkehren könnte - aber nur, weil ich jetzt zwei Snapshots habe, kann ich nicht einmal zum neuesten zurückkehren ?!?!?