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();
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
}
}
Cela fonctionne bien aussi:
@Autowired
ApplicationContext context;
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.
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() {
}
}