2012-07-13 6 views
5

Una volta aggiunta l'annotazione RunWith, ovvero @RunWith(PowerMockRunner.class), Spring Autowire non funziona più!Perché Spring Autowire smette di funzionare quando aggiungo l'annotazione "RunWith"?

class B { 
    @Autowire 
    SessionFactory session; 
} 

@RunWith(PowerMockRunner.class) 
@PrepareForTest{SomeClass.class} 

class Testing { 

    @Test 
    methodA(){ 
    //mehod 
    } 

    @Test 
    methodD(){ 
    }  
} 

Ora, il metodo A effettua una chiamata alla classe B, ma a causa di RunWith(PowerMockRunner) annotazioni, l'autowiring non funziona. Qualsiasi aiuto sarebbe molto apprezzato!

+1

Cosa fa la 'prima' caso simile. @Autowire non funziona solo. Stavi usando qualche runner per test di primavera o MockitoJUnitRunner o qualcos'altro quando prima funzionava? – jhericks

+1

Invece del cablaggio automatico, utilizzare Whitebox o setter per impostare il campo su una simulazione. Hai più controllo su ciò che sta accadendo nella tua classe in questo modo. –

+0

hi jhericks, quando era in esecuzione, RunWith ha detto RunWith (SpringJUnit4ClassRunner) – TimeToCodeTheRoad

risposta

1

La primavera non è magia (anche se a volte sembra che lo sia). No, nel tuo codice stai dando a Spring la possibilità di avviare un contesto applicativo e fare il suo lavoro di cablaggio automatico dei tuoi bean. È necessario avviare il contesto manualmente o passare il test per utilizzare @RunWith(SpringJUnit4ClassRunner.class). Sfortunatamente, JUnit supporta solo un singolo corridore alla volta, quindi dovrai smettere di usare PowerMockRunner.