viernes, 3 de mayo de 2013

Introducción a Spring JDBC como solución a los problemas de uso e JDBC en proyectos productivos. III

En la entrada “Utilidad de MAVEN para aquellos que desarrollan en JAVA.” Vimos cómo usar Maven para la gestión de las dependencias de un proyecto y su compilación. En esta entrada veremos cómo reutilizar lo que sabemos de Maven en el proyecto que hemos ido desarrollando y evolucionando en las entradas 1 y 2 de esta serie.

Los pasos a seguir son estos:

1.- Usaremos el proyecto ya creado con Maven y moveremos los paquetes del proyecto anterior para src/main/java.

clip_image001

De momento no haremos nada en la ubicación src/test/java pues es para las pruebas que se realizarán al final de esta entrada

2.- En el caso que estamos probando mantenemos la misma implementación de la clase entidad Capitulo, nada cambia aquí. En el caso de la clase interface ICapitulo y su implementación pues agregamos un nuevo método para obtener el capítulo dado su ID.

Esta es la clase interface.

clip_image002

Y esta es su implementación:

clip_image004

Vean que tenemos las consultas en variables para una mejor gestión de las mismas y que hemos agregado la implementación del método “getCapitulobyID”.

De la plantilla de JDBC usamos los métodos “query” para la consulta de selección, ”update” para la consulta de inserción y “queryforObject” para obtener un objeto.

Esta implementación depende de la clase “CapituloMapper” que es la que nos permite crear una instancia de la entidad “Capitulo” por cada tupla devuelta por la consulta. La podemos ver en la siguiente imagen.

clip_image005

La he separado porque así la puedo reutilizar en diferentes métodos.

Y bueno estos fueron los cambios en la implementación. ¿Pocos, verdad?

3.- Lo otro que haremos será cambiar la forma en que probamos que todo funciona. En la entrada 2 de esta serie veíamos como creábamos una clase Test1 para probar los métodos de nuestra implementación desde un Main. Es funcional pero no práctico cuando nuestra capa de acceso a datos crece y se complica su mantenimiento. La solución que proponemos es hacer uso de la programación guiada por pruebas a partir de los frameworks Junit y Spring-test.

Debemos crear una clase que contenga métodos que nos permitan probar automáticamente los métodos de obtener el listado de capítulos y de obtener un capitulo dado su ID. La clase que implementa esta funcionalidad es la siguiente:

clip_image006

Lo primero que hacemos es hacer uso de la anotación @RunWith para indicar que no usaremos Junit si no el framework de Spring para correr las pruebas.

Luego usamos la anotación @ContextConfiguration para indicarle donde está el fichero de configuración de Spring que es el siguiente:

clip_image008

Tenemos la variable capituloDAO anotada con @AutoWire, esto indica que la misma será inyectada automáticamente con la implementación CapituloDAO.

Luego tenemos 3 métodos anotados con @Test y estos son nuestros métodos de prueba. Cada uno hace uso de la clase Assert y diferentes métodos.

El método “isInstanceOf” se encarga de determinar si el segundo parámetro que se le pasa es una instancia del primer parámetro.

El método notNull se encarga de validar si el valor que se le pasa no es nulo.

El método notEmpty recibe una colección y nos valida que no está vacía.

Como ya estamos trabajando en un proyecto MAVEN usaremos su funcionalidad par correr las pruebas así que si fuéramos a la raíz del proyecto y ejecutáramos el comando mvn test o si desde el Eclipse le diéramos clic derecho al proyecto y luego /Run As/Maven Test veríamos un resultado como el siguiente(es solo una parte de toda la información resultante de la ejecución del comando):

clip_image010

Como ven nos dice que se ejecutaron 3 pruebas, con 0 fallas y 0 errores. O sea que las 3 fueron exitosas.

Ahora removeré de la tabla “capitulo” la tupla con ID(idx) igual a 23 y veremos qué es lo que pasa.

clip_image011

Al ejecutar de nuevo las pruebas tenemos el siguiente resultado.

clip_image013

Solo una prueba tuvo éxito, la que no necesitaba de la tupla con ID 23, en este caso el test de obtener el listado de capítulos. Los resultados dicen que ocurrieron 2 errores y que podemos ver los detalles en el directorio surefire-reports.

clip_image015

Como ven nos dice que se esperaba un resultado devuelto por la ejecución de los métodos pero que no se obtuvo el resultado esperado. Si vuelven a incluir una tupla en la tabla “capitulo” con ID igual a 23 se solucionará el problema.

Para terminar si quisiéramos crear el jar para empaquetar nuestras clases bastaría con ejecutar el comando mvn install y con eso se crearía un fichero ejemplo-de-prueba-1.0-SNAPSHOT.jar siempre que se pasaran todas las pruebas definidas con anterioridad.

El ejemplo es bastante básico pero muestra:

  1. Lo fácil que es mover un proyecto para Maven. Incluso en este caso lo hice manual pero si buscan un poco verán comandos o funcionalidades en el Eclipse para hacerlo de forma automática.
  2. La forma de implementar pruebas con spring.
  3. Automatizar la ejecución de estas pruebas con Maven.

En otras entradas iremos mejorando la forma de implementar todo esto enseñándoles como pasar de Spring JDBC a Spring+Hibernate+JPA.

Adjunto el código fuente de este proyecto.


¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon