“Autowire by name” en tests con Spring

Comments   0   Date Arrow  Abril 18, 2008 at 11:44am   User  by Pedro Marce

Cuando probéis de hacer tests con Spring, si queréis inyectar dependencias en ellos (probablemente lo más normal ya que estáis con Spring) tengáis problemas al ejecutarlos, vaya, que no funcione. El problema, muy bien explicado, lo encontráis en el blog de jmonne. El caso es que las clases que extiendes para hacer los tests tienen activado el autowiring, no como las demás clases de Spring, y por defecto lo hace por tipo. Con lo cual si usas clases genéricas vas a tener problemas al no poderse resolver la dependencia debido a que encontrará ambigüedades.
La solución que a mi me ha parecido más clara para estos casos es cambiar el autowire y hacerlo por nombre. De esta manera eliminaremos la ambigüedad.
Para conseguirlo la propiedad en la clase del test se llamará igual que la definición de la clase que quieras instanciar, además añadiremos al constructor de la clase de nuestro test que el modo de autowire sea por nombre.
Mucho mejor lo veréis en un ejemplo:

  • applicationContext.xml
  • Definición de la clase sobre la que queremos hacer el test.
  • <bean id="tableManager" class="com.pedromarce.GenericManagerImpl">
    <property name="genericDao" ref="tableDao"/>
    </bean>

  • TestTable.java
  • Clase que ejecuta el test, basada en junit.
  • public class TestTipusAvantatge extends AbstractTransactionalDataSourceSpringContextTests {
    protected GenericManager tableManager;
    public testTable() {
    setAutowireMode(AUTOWIRE_BY_NAME);
    }
    public void setTable(GenericManager service) {
    this.tableManager = service;
    }
    protected String[] getConfigLocations() {
    return new String[] { "applicationContext.xml"};
    }
    public myTest() throws Exception {
    .......
    }
    }

Y eso es todo, así ya podréis pasar tests unitarios a clases genéricas que inyectan las clases finales en tiempo de ejecución.
Como dijo Trillo, manda huevos…

Tagged   java · tutorial

0 Comments

  • There are no comments yet, be the first by filling in the form below.

Leave a Comment


Cerrar
Enviar por Correo