Spring Batch IV: Testing

En esta cuarta entrada, Spring Batch IV: Testing, realizaré la descripción de cómo se define una clase test para probar un proceso. Las entradas anteriores, para el nuevo lector, son las siguientes: Spring Batch I: Introducción, en donde realicé una introducción de Spring Batch, así como, la definición de un ejemplo base; en la segunda entrada, Spring Batch II: Lectores (Reader), realicé una descripción de cómo se definen entidades lectoras de ficheros CSV y XML; y, en la tercera, Spring Batch III: Escritores (Writer), realizaré la descripción de cómo se definen entidades escritoras de ficheros CSV y ficheros XMl.

Definición del proceso

Para realizar un test de un proceso es necesario la existencia de un proceso, así, el proceso a probar, será el proceso de la entrada anterior en donde se realizaba una lectura de un fichero de texto y se creaba un fichero CSV y XML. Además, deberemos de añadir el jar de la base de datos en memoria HSQLDB, versión 2.3.0, para realizar dichas pruebas. El snippet a añadir al fichero pom es el siguiente:

<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId>
  <version>${hsqldb.version}</version>
  <scope>runtime</scope>
</dependency>

Definición, configuración y ejecución de la clase Test

La definición de una clase de test de un proceso es la definición típica de una clase de de pruebas con JUnit. Se define la clase con los métodos de test de aquella funcionalidad a probar; en este caso, definiré una método para el testeo de la ejecución del proceso. Para lanzar el proceso, es necesario definir una utilidad para lanzar procesos en modo test cuyo nombre es JobLauncherTestUtils. Para poder inyectar en la clase de test es necesario definirla en el contexto de Spring con la siguiente declaración:

<bean class="org.springframework.batch.test.JobLauncherTestUtils" />

Una vez declarada, se inyecta la utilidad en la clase de test con la anotación Autowired. El método de prueba es el siguiente:

...
@Autowired
protected JobLauncherTestUtils jobLauncherTestUtils;
...
@Test
public void testJob() {
 JobExecution jobExecution;
 try {
   jobExecution = this.jobLauncherTestUtils.launchJob();
   assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
 } catch (Exception e) {
   e.printStackTrace();
   fail(e.getMessage());
 }
}

La funcionalidad consiste en lo siguiente: primero, se inicia la ejecución del proceso mediante la clase JobLauncherTestUtils retornando una referencia a una objeto de la clase JobExecution con la información del proceso una vez finalizado; por último, se consulta el estado de terminación mediante el método getStatus. Los estados pueden ser: completado, arrancado, iniciado,…

La ejecución del proceso es como cualquier otra ejecución de una clase de test.

Si se desea el código ejemplo se puede acceder aquí.

En la siguiente entrada, Spring Batch V: Particionadores, patrón master-slave, realizaré una descripción de cómo se realiza la definición de un proceso multihilo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s