Inizializza JDBC Completi nel database di memoria con trigger per i test di integrazione?
-
02-01-2020 - |
Domanda
Attualmente, abbiamo un'istanza di database per tutti i nostri test di integrazione. Lo schema del database Oracle è sincronizzato da un grappolo di DDLS. Quindi usiamo dbunit per popolare e troncati le tabelle tra i test. Ci sono due problemi con questo approccio:
- .
- Il tempo trascorso a preparare il database è più di quello che viene speso il test
- A volte, di solito un errore di prova, i dati di prova sanguinano su un test successivo e provoca più fallimenti.
- Potrei creare un database in-memory (H2 o qualsiasi altra cosa) spento di uno schema Oracle esistente, i trigger inclusi?
- Oppure, posso creare un database di memoria in un database di memoria utilizzando il mio EntityManager (Generazione DDL) e creare un gruppo di trigger al volo, ma prima dell'esecuzione del test?
- Spring: 3.2.8
- Dati primaverili JPA: 1.5.3
- link eclipse: 2.5.1
- Oracle: 11
Voglio isolare i test creando un database in-memory (come H2) per test. Ho intenzione di configurare Eclipselink per generare il DDL (perché convertire l'Oracle DDL a qualcos'altro sarà un incubo che immaginerei). L'unico problema a quel punto sarebbe quello di creare trigger.
Quindi ho due domande ...
- .
Pila di tecnologia:
- .
Ho familiarità con come istanziare un ambiente di integrazione del test a molla per caricare un database in-memory. Non so come posso tradurre la roba Oracle (trigger, in particolare).
Soluzione
.Potrei creare un database in-memory (H2 o qualsiasi altra cosa) spento di uno schema Oracle esistente, i trigger sono stati inclusi?
Sì, puoi averlo. Usiamo i postGres per tutti i nostri database fisici e HSQL per il database in-Memory. Abbiamo iniziato con l'utilizzo di Hibernate per generare il database fuori dalle classi di entità, ma ora è migrato per utilizzare Flyway. Tieni presente che alcuni dei tuoi DML e DDL saranno personalizzati per Oracle, quindi dovrai personalizzare per HSQL o H2 (piuttosto facile da usare con Flyway).
.O, posso creare un database di memoria nel mio entitàManager (Generazione DDL) e creare un mazzo di trigger al volo, ma prima dell'esecuzione del test?
Puoi pulire / popolare il tuo database in-memory Comunque desideri. Ci sono molteplici modi:
- .
- Estensioni del test flyway - questo rende facile ed è ciò che usiamo. https://github.com/flyway/flyway-test-etstensments . Scrivi un bean a molla che ha un profilo di prova @profile ("Test") e inserirà i dati per l'ambiente di test.
- Utilizzare uno script di import.sql. Credo che la cablaggio del test di primavera cercherà questo.