Como acesso contexto da Primavera em jUnit testes anotado com @RunWith e @ContextConfiguration?
-
19-09-2019 - |
Pergunta
Eu tenho seguinte classe de teste
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {
@Autowired
MyService service;
...
}
É possível o acesso services-test-config.xml
programaticamente em um dos tais métodos? Como:
ApplicationContext ctx = somehowGetContext();
Solução
Uma vez que os testes vão ser instanciado como um bean Spring também, você só precisa implementar a interface 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
}
}
Outras dicas
Isso funciona bem também:
@Autowired
ApplicationContext context;
Se a sua classe de teste se estende as classes Primavera JUnit
(Por exemplo, AbstractTransactionalJUnit4SpringContextTests
ou qualquer outra classe que estende AbstractSpringContextTests
), você pode acessar o contexto aplicativo chamando o método getContext()
.
Confira o javadocs para o org.springframework pacote .test.
É possível injetar instância da classe ApplicationContext
usando SpringClassRule
e SpringMethodRule
governa. Pode ser muito útil se você gostaria de usar
mais corredores não-mola. Aqui está um exemplo:
@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() {
}
}