wake-up-neo.net

Zugriff auf den Spring-Kontext in jUnit-Tests, die mit @RunWith und @ContextConfiguration kommentiert wurden?

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();
50
Vladimir

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
    }
}
44
Daff

Das funktioniert auch gut:

@Autowired
ApplicationContext context;
66
axtavt

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.

6
duffymo

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() {
    }
}
0
Laplas