Comment accéder contexte de printemps dans les tests JUnit annotés avec @RunWith et @ContextConfiguration?
-
19-09-2019 - |
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();
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() {
}
}