sábado, 20 de marzo de 2010

Borrar base de datos en test!!

Cuando hacemos test de DAOs, servicios o que tenga que interactuar con una base de datos es bueno usar una base de datos en memoria como HSQLDB.

El problema está en que cada test inserta datos en la base, lo que hace que el resultado de un test dependa de la ejecución de otro test; esto no es bueno.

Si trabajamos con base de datos en memoria y Spring lo que podríamos hacer es bajarla y volverla a subir usando: @DirtiesContext en cada uno de los test. @DirtiesContext es una anotación de spring que baja y sube el contexto. Esto es una solución, pero no la más optima los test van a demorar más dado que por cada test se baja y sube el contexto. La solución más óptima es borrar la base en cada test de este modo:

@After
public void tearDown() {
this.restoreEmptyDatabase();
}

private void restoreEmptyDatabase() {
LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean) this.applicationContext
.getBean("&sessionFactory");
sessionFactory.dropDatabaseSchema();
sessionFactory.createDatabaseSchema();
}

Podríamos ponerlo en el After o Before es indistindo este método borrara la base por test.