2010-06-16 19 views
15

En mi proyecto puedo probar con éxito el código de la base de datos. Estoy usando Spring, Hibernate, HSQLDB, JUnit y Maven.¿Cuál es la mejor forma de ejecutar HSQLDB para pruebas unitarias, cuando se trabaja con Spring, Maven e hibernate?

El problema es que actualmente tengo que ejecutar HSQLDB manualmente antes de ejecutar las pruebas. ¿Cuál es la mejor manera de automatizar el lanzamiento de HSQLDB con las tecnologías que se utilizan?

+0

Actualmente estoy trabajando en una aplicación en la que se necesita una base de datos en memoria para realizar pruebas automatizadas de JUnit. El siguiente artículo contestó muchas de mis preguntas: [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) –

Respuesta

12

Estoy asumiendo que con hsql se está refiriendo a HSQLDB.

Configurar la URL de su base de datos para los controladores JDBC (para hibernar, etc.) a la versión basada en la memoria incorporada de HSQLDB:

jdbc:hsqldb:mem:myunittests 

A continuación, una versión InProcess de HSQLDB se inicia automáticamente que las tiendas de cosas para la memoria. No es necesario iniciar ningún servidor externo.

+0

Gracias, solo por empezar con HSQLDB. El tutorial que estaba siguiendo se configuró para usar un servidor. Cambiar para usar en la memoria resuelve mi problema. –

-4

Con JUnit, puede crear un método que se ejecuta antes de que sus pruebas con la siguiente anotación: @Before

El enlace a la documentación sobre JUnit es aquí: JUnit FAQ - Test Fixtures

3

Yo mismo uso la base de datos en memoria de hsql para probar mi DAO. Como resultado, no necesito estar conectado a ningún servidor de db externo ni tener ninguna conexión de red.
Use la siguiente configuración:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver

jdbc.url=jdbc:hsqldb:mem:DatabaseName

también incluyen la

<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> 

Esto le permitirá utilizar la base de datos en memoria y creará automáticamente las tablas de la base de hibernación objetos antes de ejecutar pruebas.

Espero que esto te ayude.

Nota:

La propiedad "DEFAULT_SCHEMA" se utiliza cuando el DBA crea varios esquemas dentro de una sola base de datos. Lo he visto en postgres, donde todos usan una URL de base de datos, pero debajo hay esquemas separados para cada aplicación.

Al usar la propiedad de esquema predeterminada, le permite mantener los nombres de esquema fuera de sus entidades. Esto es particularmente útil si está ejecutando pruebas contra HSqlDB que no admite esquemas e implementa en un DB que usa esquemas. Tener un valor nulo solo significa que vuelve al esquema predeterminado de DB.

+1

La propiedad 'default_schema' causó un error para mí. Eliminar esa propiedad lo hizo funcionar. –

+0

Gracias. Hice los cambios. – nishant

Cuestiones relacionadas