Comment accéder contexte de printemps dans les tests JUnit annotés avec @RunWith et @ContextConfiguration?

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

Question

Je suit 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 programme dans l'une de ces méthodes? Comme:

ApplicationContext ctx = somehowGetContext();
Était-ce utile?

La solution

Étant donné que les tests seront instanciées comme un grain de printemps aussi, il vous suffit de mettre en œuvre 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
    }
}

Autres conseils

Cela fonctionne bien aussi:

@Autowired
ApplicationContext context;

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

Il est possible d'injecter instance de classe ApplicationContext en utilisant SpringClassRule et les règles de SpringMethodRule. Il pourrait être très pratique si vous souhaitez utiliser un autre coureurs non-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() {
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top