Ich habe folgende Testklasse
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {
@Autowired
MyService service;
...
}
Ist es möglich, mit einer dieser Methoden programmgesteuert auf services-test-config.xml
zuzugreifen? Mögen:
ApplicationContext ctx = somehowGetContext();
Da die Tests auch wie ein Spring Bean instanziiert werden, müssen Sie nur die ApplicationContextAware-Schnittstelle implementieren:
@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
}
}
Das funktioniert auch gut:
@Autowired
ApplicationContext context;
Wenn Ihre Testklasse die Spring JUnit-Klassen erweitert
(z. B. AbstractTransactionalJUnit4SpringContextTests
oder einer anderen Klasse, die AbstractSpringContextTests
erweitert) können Sie auf den App-Kontext zugreifen, indem Sie die getContext()
-Methode aufrufen.
Schauen Sie sich die javadocs für das Paket org.springframework.test an.
Es ist möglich, die Instanz der ApplicationContext
-Klasse mithilfe der SpringClassRule
.__- und SpringMethodRule
-Regeln einzuschleusen. Es könnte sehr praktisch sein, wenn Sie andere Spring-Läufer verwenden möchten. Hier ist ein Beispiel:
@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() {
}
}