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();
War es hilfreich?

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() {
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top