Spring Testing
Descripción
Quien no testea no avanza, y si avanza, puede estar avanzando mal. Esta afirmación que puede parecer muy exagerada es necesaria para comprender la necesidad de testear nuestro código para observar rápidamente los posibles errores que puede generar. Spring nos proporciona una jerarquia de clases para llevar a cabo de manera mas fácil nuestros tests.
Hay dos clases principales a utilizar que son las siguientes:
- AbstractDependencyInjectionSpringContextTests.
Nos permite hacer uso de setter injection en los tests.
- AbstractTransactionalDataSourceSpringContextTests.
Nos permite testear partes del código que necesitan hacer uso de una base de datos haciendo un rollback cuando se termina el test, dejando la base de datos tal como estaba antes de lanzar el test.
El uso que hace Spring de los contextos configurados en ficheros XML puede causar que el tiempo de carga de estos contextos por cada test sea elevado, con lo que ejecutar los tests puede ser pesado y llegar a reducir la productividad. Para solucionar este problema Spring guarda los contextos en una caché, augmentando la producitivdad sin tener la necesidad de cargar cada vez los contextos con todo el trabajo que implica para Spring.
Para definir los ficheros XML se tiene que sobreescribir el método:
protected abstract String[] getConfigLocations();
Un pequeño ejemplo del AbstractDependencyInjectionSpringContextTests.
public class UserTests extends AbstractDependencyInjectionSpringContextTests { private Credentials credentials; public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
public void testCredentials() throws Exception {
User user = new User();
credentials.setLogin("javaconganas");
user.setCredentials(credentials);
assertEquals("javaconganas", user.getCredentials().getLogin());
} protected String[] getConfigLocations() {
return new String[] { "classpath:applicationContext.xml" };
}}
Prerrequisitos
Referencias
Checklist
- ¿Entiendo por qué es necesario hacer tests?
¿Y ahora?