DBUnit y aplicaciones JDBC

1
9525

DBUnit y aplicaciones JDBC

1. Introducción

Siempre hemos hecho hincapié en la importancia de los test en el desarrollo de aplicaciones. DBUnit, como se vio en el tutorial «DBUnit – Exportar e Importar BBDD«, es un framework que nos ayuda a testear aquellas clases que interaccionan con las base de datos. Lo habitual hoy en día es utilizar frameworks ORM como Hibernare que nos abstraigan de esta tarea monótona de una manera fácil y no intrusiva en nuestro código, pero todavía existen aplicaciones que no utilizan estos tipos de framework por alguna razón y lo hacen de forma tradicional a través de JDBC.

Si queremos utilizar DBUnit en estos casos tendremos que hacer algunas tareas adicionales para que nuestros test funcionen. Creo que es importante indicar que DBUnit únicamente se encarga de realizar la carga de los datos de prueba antes de ejecutar nuestros test. Por tanto, la creación del modelo de datos no es responsabilidad de DBUnit. Frameworks como Hibernate realizan esta tarea por ti, es decir, se le puede indicar a Hibernate que cree nuestro schema a partir de las entidades definidas en nuestra aplicación. En los casos en los que se usa JDBC, esto será responsabilidad del programador, de lo contrario nos encontraremos con la famosa excepcion «org.dbunit.dataset.NoSuchTableException».

En este tutorial vamos a indicar una forma fácil de solventar el problema de la creación del schema antes de que DBUnit se ejecute.

2. Entorno

Entorno utilizado para escribir este tutorial:

  • Hardware: Mac Book Pro (Core 2 Duo 2,8 Ghz, 4 GB RAM, 500 GB)
  • Sistema Operativo: Snow Leopard
  • Maven:: 2.2.1
  • Spring:: 3.0.1.RELEASE
  • Junit:: 4,5
  • DBUnit:: 2.4.2
  • HsqlDB:: 1.8.0.7

3. DBUnit y JDBC.

3.1 USerService

Imaginemos que queremos testear nuestra clase UserService. Como veis tenemos un método que retorna todos los usuarios de la tabla users.

3.2 UserServiceTest

Ahora creamos nuestro Test.

Como podéis ver en la línea 34, antes de cargar los datos con DBUnit lanzamos un script DDL con la creación de las tablas. Esto hará que DBUnit no nos lance la famosa excepción «org.dbunit.dataset.NoSuchTableException» cuando en la línea 38 carguemos los datos. Tanto para la creación como la carga hemos implementado una clase de utilidad llamada DBUnitUtils.

Como veis, en la línea 65 utilizamos la clase SimpleJdbcTestUtils con el fin de lanzar el fichero ddl para la creación de las tablas.

3.3 Ficheros ddl.sql y initdb.xml

Ahora creamos los ficheros ddl.sql y initdb.xml necesarios para la creación y carga respectivamente.

3.4 context-test.xml

Como habéis podido comprobar estamos utilizando Spring. En nuestro test hemos indicado que nuestro fichero de configuración de Spring se encuentra en el classpath con el nombre context-text.xml. En él hemos configurado el dataSource y el JdbTemplate que utilizará nuestra clase UserService e igualmente, en la línea 15 se le indica a Spring que escanee a partir del paquete «com.adictos» para que añada automáticamente a la configuración de spring todas las clases anotadas con @Service,@Component, etc.. sin la necesidad de crearlos en el fichero xml con la etiqueta .

Ahora cuando ejecutemos nuestro test con maven «maven test» veremos que funciona correctamente. Para aquellos quienes os interese, os dejo el proyecto completo aquí.

4. Conclusión

Desde Autentia siempre recomendamos la utilización de test en nuestras aplicaciones independientemente de la naturaleza de nuestro proyecto. Con este tutorial hemos visto como testear con DBUnit clases que acceden a la base de datos a través de JDBC.

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here