18-02-2008 Raul Vicente
Hace poco un lector de mi post Spring y JUnit se mostraba inquieto porque pensaba que la capacidad de integración de Spring con JUnit se había perdido con la nueva versión de este último, al menos en lo que al tratamiento de las transacciones se trataba. En un principio me pilló un poco fuera de juego ya que no había trabajado con JUnit 4, pero con un poco de paciencia y leyendo la documentación he conseguido realizar mis tests con JUnit 4 y Spring 2.5, tal y como los hacía antes, eso sí la sintaxis cambia un poquito. Como el movimiento se demuestra andando os dejo el resultado y lo comentamos más adelante.
@ContextConfiguration
public class FacadeImplTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private Facade facade;
@Test
public void testGetAplicaciones() {
List <Aplicacion> lista = this.facade.getAplicaciones();
System.out.println(lista.size());
int cont = simpleJdbcTemplate.queryForInt(“SELECT COUNT(*) FROM APLICACION”);
System.out.println(“Contador:”+cont);
assertEquals(cont, lista.size());
}
@Test
public void testAñadirAplicacion() {
Aplicacion aplicacion=new Aplicacion();
aplicacion.setNombre(“Nueva”);
aplicacion.setDescripcion(“Es una nueva aplicacion”);
this.facade.añadirAplicacion(aplicacion);
Aplicacion aplicacion2=this.facade.getAplicacion(“Nueva”);
assertNotNull(aplicacion2);
System.out.println(aplicacion2.getNombre());
}
@Test
public void testGetAplicacion() {
Aplicacion aplicacion=this.facade.getAplicacion(“Padrón”);
System.out.println(aplicacion.getNombre());
assertNotNull(aplicacion);
}
@Test
public void testEliminarAplicacion() {
Aplicacion aplicacion=this.facade.getAplicacion(“aa”);
System.out.println(aplicacion.getNombre());
this.facade.eliminarAplicacion(aplicacion.getId());
int apli = simpleJdbcTemplate.queryForInt(“select count(*) from Aplicacion”);
assertEquals(apli,4);
}
@Test
public void testModificarAplicacion() {
Aplicacion aplicacion=this.facade.getAplicacion(“Padrón”);
aplicacion.setDescripcion(“Epa”);
this.facade.modificarAplicacion(aplicacion);
Aplicacion apli=this.facade.getAplicacion(“Padrón”);
System.out.println(apli.getDescripcion());
assertEquals(“Epa”,apli.getDescripcion());
}
}
Lo primero que se ha cambiado es la clase de la que hay que extender, es decir, se han hecho dentro de Spring unas clases sólo para JUni4, si alguién tiene dudas lo mejor será que mire la documentación de esas clases. Por lo demás, se utilizan annotations de tal manera que la clase que va a contener todos los test hay que identificarla con la annotation @ContextConfiguration y los métodos que contienen los test con la annotation @Test. Por último, en la parte en la que se inyecta la lógica de negocio ya no hace falta facilitar un método set, ahora basta con utilizar la annotation @Autowired, eso sí, ahora se exige que el nombre del fichero xml que contiene el contexto de Spring se llame [nombre de la clase a testear]-context.xml y que esté en el mismo paquete que el test, yo, al menos, no he sido capaz de librarme de esto, pero por lo demás no hay demasiadas variaciones con respecto al otro ejemplo.
Espero que os sea de utilidad, os dejo la URL de Spring por si alguno quiere bajarse la documentación y hacer alguna prueba.
1. Dail | abril 15th, 2008 at 3:52 pm
hola esta pagina ayuda mucho necesitaba algunas cosas y me ayudo
2. Raúl Vicente | abril 16th, 2008 at 11:11 am
Muchas gracias por la flor, espero que seamos ayuda durante mucho tiempo.
3. Nicolas Duran | marzo 12th, 2009 at 9:16 pm
Para librarte de que el contexto de Spring se llame [nombre de la clase a testear]-context.xml se puede especificar en el annotation la ruta y nombre del archivo
Ejemplo:
@ContextConfiguration(locations = { “classpath:/org/doc/test_application-context.xml” })
4. Raul | marzo 15th, 2009 at 12:23 pm
Buenas Nicolas,
la verdad es que cuando lo hice no indague tanto, probé varias cosas hasta que me funcionó tal y como quería. Gracias por tu ayuda, lo tendré en cuenta.
Gracias por colaborar.