Cómo acceder contexto de primavera en las pruebas JUnit con anotada y @RunWith @ContextConfiguration?

StackOverflow https://stackoverflow.com/questions/2425015

Pregunta

He siguiente clase de prueba

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {

  @Autowired
  MyService service;
...

}

¿Es posible acceder a la services-test-config.xml mediante programación en uno de estos métodos? Como:

ApplicationContext ctx = somehowGetContext();
¿Fue útil?

Solución

Dado que las pruebas se creará una instancia como un grano de primavera también, sólo tiene que implementar la interfaz ApplicationContextAware:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest implements ApplicationContextAware
{

  @Autowired
  MyService service;
...
    @Override
    public void setApplicationContext(ApplicationContext context)
            throws BeansException
    {
        // Do something with the context here
    }
}

Otros consejos

Esto funciona muy bien también:

@Autowired
ApplicationContext context;

Si su clase de prueba se extiende a las clases JUnit primavera
(Por ejemplo, AbstractTransactionalJUnit4SpringContextTests o cualquier otra clase que se extiende AbstractSpringContextTests), puede acceder a la aplicación contexto llamando al método getContext().
Echa un vistazo a la javadocs para el paquete de org.springframework .test.

Es posible inyectar instancia de la clase ApplicationContext utilizando SpringClassRule y las reglas SpringMethodRule. Podría ser muy útil si se desea utilizar otros corredores no Spring. He aquí un ejemplo:

@ContextConfiguration(classes = BeanConfiguration.class)
public static class SpringRuleUsage {

    @ClassRule
    public static final SpringClassRule springClassRule = new SpringClassRule();

    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();

    @Autowired
    private ApplicationContext context;

    @Test
    public void shouldInjectContext() {
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top