2010-06-16 9 views
15

Nel mio progetto posso testare correttamente il codice del database. Sto usando Spring, Hibernate, HSQLDB, JUnit e Maven.Qual è il modo migliore per avviare HSQLDB per il test delle unità, quando si lavora con la molla, con lo scanner e con l'ibernazione?

Il problema è che al momento devo avviare manualmente HSQLDB prima di eseguire i test. Qual è il modo migliore per automatizzare il lancio di HSQLDB con le tecnologie utilizzate?

+0

Attualmente sto lavorando a un'applicazione in cui è necessario un database in memoria per i test automatizzati JUnit. Il seguente articolo ha risposto a molte delle mie domande: [http://tshikatshikaaa.blogspot.de/2012/09/junit-testing-spring-service-and-dao.html](http://tshikatshikaaa.blogspot.de/2012/09/junit-testing-spring-service-and-dao.html) –

risposta

12

Io parto dal presupposto che con hsql si fa riferimento HSQLDB.

Configurare il vostro URL del database per i driver JDBC (per hibernate, ecc) per la versione base di memoria integrata di HSQLDB:

jdbc:hsqldb:mem:myunittests 

Poi una versione inprocess di HSQLDB avvia automaticamente che i negozi roba alla memoria. Non è necessario avviare alcun server esterno.

+0

Grazie, appena iniziato con HSQLDB. Il tutorial che stavo seguendo era configurato per l'utilizzo di un server. Cambiare per usare in memoria risolve il mio problema. –

-4

Con JUnit, è possibile creare un metodo che viene eseguito prima che i test utilizzando la seguente annotazione: @Before

il link alla documentazione JUnit a questo proposito è qui: JUnit FAQ - Test Fixtures

0

Utilizzare lo in-process o in memory e inizierà da JDBC quando si stabilisce una connessione.

3

Io stesso utilizzo il database in memoria di hsql per testare il mio DAO. Di conseguenza, non ho bisogno di essere collegato a qualsiasi server db esterno o di avere alcuna connessione di rete.
Utilizzare le seguenti impostazioni:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver

jdbc.url=jdbc:hsqldb:mem:DatabaseName

includono anche il

<property name="hibernateProperties"> 
    <props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
    <prop key="default_schema">test</prop> 
    <prop key="hibernate.show_sql">true</prop> 
    <prop key="hibernate.format_sql">false</prop> 
    <prop key="hibernate.hbm2ddl.auto">create</prop> 
    </props> 
</property> 

Questo vi permetterà di utilizzare il database in memoria e crea automaticamente le tabelle del database di ibernazione oggetti prima di eseguire i test.

Spero che questo ti possa aiutare.

Nota:

La proprietà "DEFAULT_SCHEMA" viene utilizzato quando il DBA crea più schemi all'interno di un unico database. Ho visto questo con postgres in cui tutti usano un URL del database ma sotto ci sono schemi separati per ogni applicazione.

Utilizzando la proprietà schema predefinita consente di mantenere i nomi degli schemi fuori dalle entità. Ciò è particolarmente utile se si eseguono test contro HSqlDB che non supporta gli schemi e si distribuisce su un DB che utilizza schemi. Avere un valore nullo significa semplicemente ritornare allo schema di default del DB.

+1

La proprietà 'default_schema' ha causato un errore per me. Rimuovere la proprietà ha funzionato. –

+0

Grazie. Ho fatto i cambiamenti. – nishant