web-dev-qa-db-fra.com

Comment accéder au contexte Spring dans les tests jUnit annotés avec @RunWith et @ContextConfiguration?

J'ai suivi la classe de test

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

  @Autowired
  MyService service;
...

}

Est-il possible d'accéder à services-test-config.xml par programme avec l'une de ces méthodes? Comme:

ApplicationContext ctx = somehowGetContext();
50
Vladimir

Comme les tests seront également instanciés comme un bean Spring, il vous suffit d'implémenter l'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
    }
}
44
Daff

Cela fonctionne bien aussi:

@Autowired
ApplicationContext context;
66
axtavt

Si votre classe de test étend les classes Spring JUnit
.__ (par exemple, AbstractTransactionalJUnit4SpringContextTests ou toute autre classe qui étend AbstractSpringContextTests), vous pouvez accéder au contexte de l'application en appelant la méthode getContext().
Consultez le javadocs du paquet org.springframework.test.

6
duffymo

Il est possible d'injecter une instance de la classe ApplicationContext en utilisant les règles SpringClassRule Et SpringMethodRule. Cela pourrait être très pratique si vous souhaitez utiliser Un autre coureur autre que le printemps. Voici un exemple:

@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() {
    }
}
0
Laplas