Ich habe einen CI-Server (Hudson), der fröhlich Unit-Tests erstellt, ausführt und in der Entwicklungsumgebung bereitstellt, aber ich möchte jetzt, dass er die Integrationstests ausführt.
Die Integrationstests treffen auf eine Datenbank und diese Datenbank wird ständig geändert, um die für den betreffenden Test relevanten Daten zu enthalten. Dies führt jedoch zu einem Problem: Wie stelle ich sicher, dass die Datenbank nicht mit Daten für einen Test bespritzt wird und dass diese Daten dann von einem zweiten Projekt überschrieben werden, bevor der erste Testsatz abgeschlossen ist?
Ich verwende derzeit die "Hoffnung" -Methode, die im Moment nicht allzu schlecht funktioniert, aber hauptsächlich aufgrund der Tatsache, dass wir nur eine kleine Anzahl von Integrationstests auf CI eingerichtet haben.
Aus meiner Sicht habe ich folgende Möglichkeiten:
Testlokale (im Speicher) Datenbanken Ich bin mir nicht sicher, ob In-Memory-Datenbanken die Unheimlichkeit von Oracles-Triggern und -Paketen usw. bewältigen, und alles andere, was ich nicht für einen lohnenden Test halte.- CI Executor-lokale Datenbanken
Es wäre ein angemessener Arbeitsaufwand erforderlich, um dies einzurichten und auf dem neuesten Stand zu halten, aber trotzig eine Option (der größte Teil der Arbeit ist bereits erledigt, um die aktuelle CI-Datenbank auf dem neuesten Stand zu halten). - Einzelner "Integrationstest" -Exekutor
Wahrscheinlich am einfachsten zu implementieren, würde aber bedeuten, dass die Integrationstests ziemlich weit zurückfallen könnten. - Sperren der Datenbank (oder einer Reihe von Tabellen)
Ich bin sicher, ich habe einige Möglichkeiten verpasst (bitte hinzufügen). Wie führen Sie datenbankbasierte Integrationstests auf dem CI-Server durch? Welche Probleme hatten Sie und welche Methode empfehlen Sie? (Hinweis: Während ich Hudson verwende, akzeptiere ich gerne Antworten für jeden CI-Server. Die Ideen sind sicher portabel, auch wenn die Details nicht zutreffen.)
Prost,
Mlk