2016-06-03 3 views
5

Ich habe eine Anwendung, für die die Prod/Test/Qa-Datenbank nur Oracle ist. Des Weiteren vermute ich, dass SQL-Abfragen Oracle-spezifisch sind. Und leider hat diese Anwendung keine bis zwei Komponententests.Wie Oracle als eingebettete Datenbank für die Ausführung von Komponententests in Maven verwenden?

Als Konsequenz würde ich gern Unit-Tests implementieren, speziell in Bezug auf die Suchkomponente (die offensichtlich viele Oracle-Operationen ausführt, einschließlich der Erstellung von Tabellen).

Normalerweise, wenn ich Tests ausführen möchte, starte ich eine eingebettete Datenbank (HSQL, als Beispiel), führe meine Tests auf dieser Datenbank aus, und lass es verblassen, wenn meine Tests enden.

Aufgrund meines mangelnden Vertrauens in die Standardisierung dieser Anwendung würde ich lieber Tests in einer Oracle-Datenbank durchführen. Als Konsequenz möchte ich die Oracle-Datenbank starten, wenn meine Tests starten, füllen Sie sie mit einigen Testdaten und stoppen Sie sie am Testende. Wie kann ich das in einem Maven Kontext tun?

+2

Hinweis: Seien Sie bei der Formulierung genau. Ich denke, dass die überwiegende Mehrheit der IT-Experten einen Test, der eine laufende Datenbank benötigt, nicht in Erwägung ziehen würde, um ein ** Unit ** -Test zu sein. Besser nennen Sie es einen Funktions- oder Integrationstest; nur um Missverständnisse für alle um dich herum zu verhindern. True ** Unit ** -Tests werden zur Kompilierungszeit ausgeführt. Sie brauchen nur Ihre kompilierten Klassen und JUnit - nicht einige eingebettete Datenbank, Dateisystem, Web-Service, Socket, ... – GhostCat

Antwort

1

Ich verstehe Sie Oracle wollen, aber Sie können auch mit h2 mit Oracle-Modus-Flag

jdbc:h2:~/test;MODE=Oracle 

Ich habe das gleiche Bedürfnis in den meisten meiner Projekte versuchen, und dies ist in der Nähe von Oracle I gefunden. Sie können Aliase für die wenigen fehlenden Funktionen definieren.

+0

Wie alias 'dose_rank'? – Stephan

+0

Ich glaube nicht, dass es getan werden kann, da dose_rank nicht dem Standard-SQL-Format folgt (zB: DENSE_RANK() OVER (PARTITION BY ...)): https://groups.google.com/forum/#! Thema/h2-Datenbank/OJkQaoWFHeM – alexbt

2

Sie können exec-maven-plugin verwenden, um eine Anwendung während des Maven-Lebenszyklus zu starten, einschließlich einer vollständigen Oracle-Instanz. Sie müssen es jedoch immer noch auf dem Builder usw. installieren, was die Lösung ziemlich kompliziert macht.

Also, was haben wir in einem anderen Projekt getan:

  1. Definieren Sie einen eindeutigen Namen Build als Maven Eigenschaft (Standard für lokalen Benutzernamen erstellt, lassen CI dies über -D liefern, zB auf Bambus können Sie umfassen Plan-Taste und Nummer)
  2. Verbindung mit einer gemeinsamen Oracle-Instanz für unsere Infrastruktur bauen
  3. eine neue Regelung auf den Namen Build definierte basierend erstellen
  4. Aktualisieren Sie das neue leere Schema mit DDL (wir verwenden Flyway in der Produktion, so dass diese Teil ist leicht)
  5. Run Integrationstests
  6. Drop-Schema in post-Integration-Testphase (seit manuell oder hängen gestoppt werden Builds kann, ist es immer noch notwendig, eine Art automatischer DB Bereinigung für veraltete Systeme)
hat

Sie können sql-maven-plugin zum Ausführen von SQL-Skripten verwenden. Oder flyway-maven-plugin bei Verwendung von Flyway.

Verwandte Themen