Spring proporciona un conjunto de anotaciones para poder realizar tests de integración con el objeto de poder probar una aplicación sin tener que desplegarla o establecer conexiones reales con algún otro sistema, como una base de datos por ejemplo.

@ContextConfiguration

Esta anotación permite especificar de donde obtener la configuración del contexto concreto a utilizar para una clase de pruebas.

Como atributo se puede indicar la ubicación de ficheros XML:

O clases que tengan el atributo @Configuration:

Las anotaciones en las clases son heredadas, por lo que se pueden construir jerarquías de clases para realizar configuraciones especializadas.

@ActiveProfiles

Esta anotación permite especificar qué perfil tienen que tener los beans a utilizar por una clase de pruebas:

Los perfiles se definen utilizando la etiqueta profile en los ficheros de configuración XML, o la anotación @Profile directamente sobre las clases.

Supongamos por ejemplo el siguiente sencillo esquema de clases:

En el fichero de configuración se podría indicar que la clase Camion se quiere utilizar en entornos de producción, y la clase Camioneta en entornos de desarrollo:

El código equivalente manipulando directamente el contexto sería similar al siguiente:

@DirtiesContext

Esta anotación sirve para indicar que el contexto utilizado por una clase de prueba se va a modificar o corromper teniendo que ser cerrado y descartado al terminar la prueba:

La anotación admite un parámetro que permite establecer cuando se tiene que descartar el contexto, por ejemplo cada vez que se ejecuta un método de la clase:

Spring mantiene internamente una cache de contextos, para evitar tener que instanciarlos por cada prueba, por lo que esta anotación resulta de utilidad para eliminar contextos de la cache.

@TestExecutionListeners

Esta anotación permite configurar listeners para un contexto de pruebas:

Una clase que quiera actuar como listener tiene que implementar la interface TestExecutionListener:

@TransactionConfiguration

Esta anotación se utiliza para indicar el nombre del bean que debe actuar como gestor de transacciones:

Sólo tiene sentido si se quiere utilizar un bean distinto al que se proporciona por defecto y que tiene por nombre “transactionManager”.

@Rollback

Esta anotación sirve para modificar la acción realizada por defecto con las transacciones al terminar un método, que consiste en ejecutar un rollback para deshacerlas.

Se puede utilizar un argumento en la anotación para que no se ejecute el rollback:

@BeforeTransaction

Esta anotación permite marcar un método para que sea ejecutado antes de crear la transacción utilizada para la ejecución de las pruebas de la clase:

@AfterTransaction

Esta anotación permite marcar un método para que sea ejecutado después de terminar la transacción utilizada para la ejecución de las pruebas de la clase: