2010-08-09 7 views
15

I miei test di integrazione sarebbero eseguiti molto più velocemente se avessi usato in-memory-database invece di PostgreSQL. Io uso JPA (Hibernate) e ho bisogno di un database in memoria che sarebbe facile passare all'utilizzo di JPA, facile da configurare e affidabile. Ha bisogno di supportare JPA e Hibernate (o viceversa se preferisci) piuttosto estesamente poiché non desidero adottare il mio codice di accesso ai dati per i test.Database di memoria semplice e affidabile per test di integrazione java veloce con supporto per JPA

Quale database sono i migliori requisiti indicati sopra?

risposta

19

Per il test di integrazione , ora utilizzo H2 (dall'autore originale di HSQLDB) che preferisco su HSQLDB. È faster (e voglio che i miei test siano il più rapidi possibile), ha alcune caratteristiche interessanti come la modalità compatibility, il team di sviluppo è molto reattivo (mentre HSQLDB è rimasto inattivo per anni fino a poco tempo fa).

+0

I parametri di riferimento sono per l'archiviazione dati persistente, i risultati in memoria possono essere diversi poiché la maggior parte del sovraccarico è dovuta alle politiche disco/cache nei database. La differenza tra H2 e HSQLDB è considerevole ma non critica. Continuo a scegliere in base alla facilità d'uso, alla configurazione minima, alle funzionalità. E la funzionalità della modalità di compatibilità sembra davvero molto interessante. Grazie! – topchef

+0

@grigory: Sì, hai ragione. Ma anche quando si utilizza una modalità persistente, H2 e HSQLDB vengono effettivamente eseguiti in memoria per impostazione predefinita e rinviare la scrittura su disco (al prezzo di Durabilità). Quindi i dati sono ancora interessanti. –

4

Sto usando HSQLDBin-memory per l'integrazione test di persistenza JPA/Hibernate in Java. Inizia abbastanza rapidamente, non richiede alcuna configurazione speciale.

L'unico problema che ho visto fino ad ora con l'utilizzo di HSQLDB con Hibernate riguardava la dimensione del batch che doveva essere impostata su 0, ma che potrebbe essere stata semplicemente correlata a una versione precedente. Farò uno scavo e vedrò se riesco a trovare i dettagli di quel problema.

Derby supports an in-memory mode in questi giorni, non è più contrassegnato come sperimentale.

+0

dato uguale supporto per database in memoria Mi piacerebbe avere la soluzione più semplice e meno invasiva (si spera che non si personalizzi (eccetto per persistence.xml)). Grazie! – topchef

+0

Un altro voto per HSQLDB, specialmente dopo il rilascio di V2, v1.x non supportava alcuni dei costrutti correnti supportati da JDBC, come il ritorno dei valori chiave autogenerati, ma v2 lo fa. – mezmo

2

Uso Derby. Per prima cosa si tratta di circa 3 linee in meno di codice per unità di test poiché non c'è bisogno di un arresto dopo il test. Tuttavia, è necessario utilizzare un'implementazione JPA che può rilasciare e creare tabelle come EclipseLink.

Derby può anche inizializzare un nuovo database in memoria da un file in modo da poter avere un database di riferimento e ripristinarlo in qualsiasi momento.

Per unit testing, però, preferisco creare i miei oggetti nella logica @Before di mio test di unità Trovo più facile soprattutto con JPA in quanto mi permette la flessibilità necessaria per fare refactoring e non devono preoccuparsi circa la struttura del database sottostante, altri strumenti come DBunit si basano praticamente su una struttura statica e il refactoring implica la modifica manuale degli XML DBunit piuttosto che affidarsi alle funzionalità di refactoring di Eclipse.

Problemi correlati