Cómo realizar pruebas unitarias con Spring y JUnit4 utilizando Gienah

1
17707

Cómo realizar pruebas unitarias con Spring y JUnit4 utilizando Gienah

 

1. Introducción

Como venimos repitiendo desde Autentia constantemente, la realización de pruebas unitarias no deberia ser opcional ya que, entre otras cosas, ayudan a pensar en qué debería hacer el código y qué no y nos da seguridad de que vamos a poder detectar errores ante cualquier cambio futuro en pocos segundos.

En otros tutoriales de adictosaltrabajo ya hemos hablado acerca de la importancia de realizar pruebas unitarias y también hemos dado diversas recetas para integrarlas en vuestros proyectos, así que no me voy a centrar en lo importante que es realizar este tipo de pruebas.

En este tutorial vamos a presentaros Gienah, una tecnología que os permitirá de una forma muy cómoda y sencilla utilizar componentes de Spring en vuestros test unitarios realizados con JUnit 4.

Pero, ¿por qué utilizar Gienah?, ¿acaso no es posible realizar pruebas unitarias con JUnit 4 y Spring directamente?. Por ser es posible, pero hay que montar cierta infraestructura para conseguirlo. Esta infraestrutura ya está hecha en Gienah y además es muy sencilla de utilizar y muy potente, así que ¿para qué reinventar la rueda?

 

2. Entorno

 

3. Instalación

Lo primero que debemos hacer es descargar el software desde la dirección http://code.google.com/p/gienah-testing/downloads/list:

 

Una vez ahi bajamos las librerias compiladas (gienah-testing-bin-E0.32.jar)

Para poder usarlas, como es normal, necesitaremos incluirlas en el classpath desde el IDE que esteis utilizando. Si usais maven y teneis un repositorio de maven, podeis incluirlo en el repositorio con un comando similar a éste:

 

mvn deploy:deploy-file -DgroupId=com.google.code -DartifactId=gienah -Dversion=0.32 -Dpackaging=jar -Dfile=/home/raul/Desktop/gienah-testing-bin-E0.32.jar -Durl=scp://servidorAutentiaMaven/var/maven/repository -DrepositoryId=servidorAutentiaMaven

 

Y luego, en el pom.xml, incluir la siguiente dependencia


	com.google.code
	gienah
	0.32

4. Realizando pruebas

Supongamos que ya tenemos nuestra aplicación con Spring funcionando, de tal modo que tenemos nuestros beans declarados en los ficheros services.xml y persistence.xml.

Para poder acceder a los beans desde los test unitarios deberemos incluir la siguientes anotaciones en nuestra clase de test:

import org.gienah.testing.junit.Configuration;
import org.gienah.testing.junit.SpringRunner;

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/services.xml", "resources/persistence.xml"})
public class AutentiaTest

Si solo necesitasemos beans declarados en el fichero services.xml:

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/services.xml"})
public class AutentiaTest

Y, si el fichero estuviera en el classpath:

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"services.xml"})
public class AutentiaTest

De momento ya tenemos acceso al contexto de Spring, con lo que podemos hacer uso de los beans declarados en él con sus dependencias ya inyectadas, pero ¿cómo recuperar los beans declarados?. Muy sencillo, sólo debemos hacer uso de la anotación @Dependency:

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"services.xml"})
public class AutentiaTest {

		@Dependency
		private AutentiaBean autentiaBean; 
		

 

Una vez tengamos el bean podemos utilizar sus métodos declarados en la interfaz AutentiaBean y, de este modo, realizar los test unitarios para la clase que implementa la interfaz

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"services.xml"})
public class AutentiaTest {

		@Dependency
		private AutentiaBean autentiaBean;
		
		@Test
		public void testURLAutentia() {
			Assert.assertTrue(autentiaBean.getUrl().equals("http://www.autentia.com/"));
		}
		

Si no conoceis las anotaciones de JUnit 4 os invito a que leais este estupendo tutorial de Carlos García

 

5. Probando DAO

Otra funcionalidad muy útil de Gienah es que permite englobar un método en una transacción y, una vez esta acabe, hacerle un rollback para dejar la base de datos tal y como estaba antes de iniciar el test. De este modo nos aseguramos de que no haya dependencias entre test y que todas las pruebas se realizan sobre una base de datos con la misma carga de datos. Para ello sólo hemos de añador la anotación @Transactional

@RunWith(value = SpringRunner.class)
@Configuration(locations = {"persistence.xml"})
public class AutentiaTest {

		@Dependency
		private AutentiaDao autentiaDao;
		
		@Test
		@Transactional
		public void testDeleteAutentiaTable() {
			autentiaDao.deleteAll();
			Assert.assertTrue(autentiaDao.findAll().size() == 0);
		}

En este ejemplo, al finalizar el test, la tabla Autentia volverá a tener la carga que tenia antes de iniciar el test y borrar todos sus datos, ya que se hace rollback al finalizar el método.

 

6. Conclusiones

En mi opinión Gienah es una librería muy útil porque nos ahorra montar una infraestructura algo engorrosa y, además, daros cuenta de lo limpio que queda el código y de lo sumamente sencillo que se hace el realizar pruebas unitarias para beans declarados en Spring. No sólo eso, sino que poder declarar los métodos transaccionales tambien juga una baza importante en pruebas de integración con bases de datos.

En este tutorial me he limitado a compartir con vosotros mi conocimiento sobre Gienah, no obstante, tambien se pueda hacer alguna cosa más con esta libreria:

http://groups.google.com/group/gienah-testing/web/project-5-minutes-tutorial

Tras este tutorial espero que tengais un motivo más para usar test unitarios en vuestros proyectos con Spring 🙂

Espero que os sea de utilidad.

 

1 COMENTARIO

  1. Hola.

    Aun soy nuevo trabajando con spring, actualmente me encuentro trabajando con spring-boot con maven y vaadin, podrias orientarme sobre como hacer pruebas unitarias sobre esto?

    De ante-mano muchas gracias.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad