Wie Spring Kontext in JUnit-Tests mit @RunWith und @ContextConfiguration kommentierten zugreifen?
-
19-09-2019 - |
Frage
Ich habe folgende Testklasse
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {
@Autowired
MyService service;
...
}
Ist es möglich, services-test-config.xml
programmatisch in einem dieser Verfahren für den Zugriff auf? Wie:
ApplicationContext ctx = somehowGetContext();
Lösung
Da die Tests wie ein Spring-Bean zu instanziert werden, Sie müssen 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
}
}
Andere Tipps
Dies funktioniert auch:
@Autowired
ApplicationContext context;
Wenn Sie Ihre Testklasse erweitert die Feder JUnit-Klassen
(Z.B. AbstractTransactionalJUnit4SpringContextTests
oder jede andere Klasse, die AbstractSpringContextTests
erstreckt), können Sie die App Kontext zugreifen, indem Sie die getContext()
Methode aufrufen.
Schauen Sie sich die javadocs für das Paket org.springframework .test.
Es ist möglich, beispielsweise von ApplicationContext
Klasse injizieren von SpringClassRule
mit
und SpringMethodRule
Regeln. Es könnte sehr nützlich sein, wenn Sie verwenden möchten
weitere Nicht-Feder Läufer. Hier 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() {
}
}