Come accedere contesto Primavera nei test JUnit annotate con @RunWith e @ContextConfiguration?
-
19-09-2019 - |
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();
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() {
}
}