2010-03-11 20 views

risposta

37

Dal momento che i test vengono 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 
    } 
} 
+0

Non possibile in primavera 3.0 e fino, fino a questa data. – ALOToverflow

+2

Strano, sto eseguendo tutti i miei test Spring 3.0 del genere ... – Daff

5

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

+0

C'è qualche differenza quando si utilizza AbstractTransactionalJUnit4SpringContextTests o AbstractSpringContextTests o semplicemente si estende ApplicationContextAware nel mio test di junit? Quali benefici sono forniti dalle 2 classi di test astratte suggerite in questa risposta? –

56

Questo funziona bene ugualmente:

@Autowired 
ApplicationContext context; 
+0

Confermato, in Spring Integration 3.0.2. Soluzione più pulita – Wrench

+0

Tuttavia questa soluzione è valida solo se la si sta utilizzando in un bean gestito. Implementando ApplicationContextAware funziona bene anche in POJO – Aditzu

+0

Funziona bene sulla primavera 4.2 – cabaji99

Problemi correlati