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();
Foi útil?

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() {
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top