Domanda

Ho seguente classe di test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {

  @Autowired
  MyService service;
...

}

E 'possibile accedere services-test-config.xml di programmazione in uno di tali metodi? Come:

ApplicationContext ctx = somehowGetContext();
È stato utile?

Soluzione

Dal momento che le prove saranno istanziati come un bean Spring troppo, non vi resta che implementare l'interfaccia 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
    }
}

Altri suggerimenti

Questo funziona bene ugualmente:

@Autowired
ApplicationContext context;

Se la classe di test si estende le classi primavera JUnit
(Per esempio, AbstractTransactionalJUnit4SpringContextTests o di qualsiasi altra classe che estende AbstractSpringContextTests), è possibile accedere contesto applicazione chiamando il metodo getContext().
Controlla la javadocs per il pacchetto di org.springframework .test.

E 'possibile iniettare un'istanza della classe ApplicationContext utilizzando SpringClassRule e le regole SpringMethodRule. Potrebbe essere molto utile se si desidera utilizzare altri corridori non molla. Ecco un esempio:

@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() {
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top