2012-03-28 6 views
1

Betrachten Sie eine automatisierte Testsuite für einen datenbankzentrierten Service. Viele kleine Teile können ohne Datenbankverbindung getestet werden, aber es ist auch nützlich, einen echten Datenbank-Snapshot (oder Snapshots) einstecken und größere Integrationsszenarien dagegen ausführen zu können. Einige Schlüsseltests umfassen somit eine Form von Pre-Execute- und Post-Execute-Daten-Snapshots, die vom Test-Code selbst getrennt sind.Halten Sie datenbankorientierte Testsuiten aktuell

Der Dienst entwickelt sich schnell und auch das Datenbankschema. Dadurch werden Testdaten ständig ungültig und es wird für Entwickler schwierig, die Testsuite auf dem neuesten Stand zu halten, ohne dass fehlerhaftes Verhalten in die aktualisierten Snapshots einfließen kann.

In der Regel ist es nicht einmal möglich, eine neuere Version des Dienstes gegen das alte Schema (Testdatenbank) auszuführen. Dies ist lösbar durch zwei Schichten von Datenbank-Snapshots, einen für die Initialisierung (Testeingabe) und einen anderen, der nur zum Prüfen verwendet wird (beispielsweise die erwartete Testausgabe). Das Initialisierungsschema/die Daten können dann zusammen mit der Anwendung automatisch aktualisiert werden, aber offensichtlich nicht mit den erwarteten Ausgabedaten.

Ich habe das schon ein paar Mal durchgemacht, aber ich würde Links zu mehr Lesen über das Thema sowie die Erfahrungen, Technologien und Methoden der Leute schätzen, besonders im Zusammenhang mit Java, .NET und möglicherweise reinen Datenbankumgebungen .

Diese Frage ist absichtlich etwas breit, weil ich weiß nicht, was ich von ihm lernen, aber hier ist auch eine schmalere Version davon:

Gibt es einen weit verbreiteten Java oder .NET Framework, das es macht einfacher für einen Entwickler, um Schemadifferenzen von Verhaltens- (Daten-) Unterschieden zu unterscheiden und die vorhandenen Testdaten halbautomatisch auf das neue Schema zu aktualisieren?

Antwort

0
  1. Es ist eine Frage eher als eine Testsuite Organisation zur Schaffung eines Rahmens, die Datenbankänderungen überwacht. Beispiel: Wenn Sie das Ruhezustands-/EJB-Persistenzmodell verwenden, können Sie vor dem Ausführen einer Testsuite eine Datenbank aus der Objektzuordnung erstellen (z. B. mithilfe von Hbm2Ddl). Dann erzeugt jeder Test notwendige Objekte über Speichereinheiten (d. H. Ohne direkten SQL). Grundsätzlich behandeln Sie in diesem Fall nicht direkt mit der Datenbank, sondern nur mit der Persistenzschicht in der Anwendung. Am Ende der Ausführung wird das Datenbankschema gelöscht.

  2. Auf der anderen Seite ist es eine Frage des Prozesses. Jede Änderung der Datenbank muss die Integrität der Tests gewährleisten. Nicht wie wenn manche Leute Datenbankänderungen vornehmen, ohne sich um die Integrität der Tests zu kümmern. Änderungen an Quellen dürfen grundsätzlich nicht akzeptiert werden, wenn Tests abgebrochen werden, unabhängig davon, ob Änderungen am Code oder an der Datenbank vorgenommen werden.

Mit anderen Worten, es sollte eine gewisse Disziplin in dem Entwicklungsprozess + richtige Testumgebung eingerichtet und arbeitet über eine Persistenz-Schicht (dh nicht eine Testdatenbank, die mit Tests ein Dump einer Produktionsdatenbank ist ohne oder mit minimalem Aufbau/Teardown).

+0

1. Ich mag Ihren Ansatz in einem interessanten Sonderfall. Es ist sehr ansprechend, solange der Dienst der alleinige Besitzer der Datenbank ist. In anderen Fällen wird die Datenbank von anderen Agenten als dem Dienst oder der Gruppe von Diensten erstellt und teilweise bevölkert, die die Testsuite abdecken soll. Wenn die Technologien zu heterogen sind, müssen einige Scheinstrukturen anderer Module oder Testdaten, die von anderen Objekten erzeugt werden, irgendwie beibehalten werden. 2. Das ist im Allgemeinen richtig, aber wie kann ich es einfacher machen, eine Testsuite zu aktualisieren, deren Technologie sich von der ihrer Technologie unterscheidet? –

+0

Verwenden Sie ein Test Integration Tool wie TeamCity oder Bamboo?In diesem Fall erhalten die Benutzer Benachrichtigungen, dass Tests abgebrochen wurden (d. H. Autoren von Änderungen, die dies verursacht haben). Und es kann sehr schnell zu einer Person eskaliert werden, die verantwortlich ist oder die Tests (oder Code) reparieren kann. –

+0

Wir verwenden TeamCity vor und nach dem Commit und einige ähnliche hauseigene Frameworks. Das Problem dabei ist, dass es viel zu einfach ist, die Testsuite falsch zu aktualisieren (wenn der Großteil der Differenz wie erwartet ist, korrekt aussieht, ist es verlockend, das tatsächliche Ergebnis als korrekt zu deklarieren). Dies ist nur ein Problem, wenn eine einzelne Änderung hundert Testfälle und eine manuelle Prüfung jedes Falles ungültig macht und jede geänderte Datenzeile nicht ganz realistisch ist. –

Verwandte Themen