Cómo acceder contexto de primavera en las pruebas JUnit con anotada y @RunWith @ContextConfiguration?
-
19-09-2019 - |
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();
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() {
}
}