2012-08-28 9 views
9

Inizialmente stavo usando solo Mockito in junits così stavo usando SpringJUnit4ClassRunner.class in @RunWith annotazione cioèproblemi durante l'utilizzo di @RunWith Annotazione e powerMock

@RunWith(SpringJUnit4ClassRunner.class) 

a causa della quale l'iniezione di dipendenza primavera stava lavorando bene ed è stata sempre un bean attraverso

@Autowired 

Someservice someservice ; 

Ma ora, ho anche integrato PowerMock in esso.

classe Così come per doc, ho sostituito menzionato nel @RunWith annotazione con

@RunWith(PowerMockRunner.class) 

ma ora, someservice è venuta fuori per essere nullo. C'è un modo per utilizzare sia SpringJUnit4ClassRunner.class e PowerMockRunner.class in @RunWith annotazione

risposta

13

Devi usare la PowerMockRule.

@RunWith(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class) 
public class MyTest { 
    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    // Tests goes here 
    ... 
} 

Per un esempio completo del test Integrazione primavera con PowerMock e Mockito, si potrebbe checkout questo maven project.

svn co http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ 
cd spring-mockito/ 

Guarda le dipendenze di powermock.

less pom.xml 

e quindi eseguire il test

mvn test 

e si dovrebbe ottenere i seguenti risultati di prova:

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 
+0

Hey gontard, ho provato la tua soluzione ma quando stavo eseguendo la mia junit ricevevo un'eccezione che la "regola" di PowerMockRule dovrebbe essere pubblica, quindi l'ho resa pubblica e ora sto ricevendo javassist.NotFoundException. qualche idea? exeption java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 \t a org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) \t a org.powermock.core.classloader.MockClassLoader.loadModifiedClass (MockClassLoader .java: 147) .... – Bhuvan

+0

@bhuvan non lo so, forse è [questo problema] (http://code.google.com/p/powermock/issues/detail?id=350). Completo anche la mia risposta. – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - questo link non funziona più. –

0
@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = "classpath:/test-servlet.xml") 
    public class ControlCenterManagerImplTest { 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    //Powermock agent initialization not required and using maven dependency specified below we can execute Power mock using spring.} 

<!-- Required for PowerMock --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Required for PowerMockRule --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule-agent</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
    </dependency> 
9

So che questo thread è vecchio, ma è bene aggiungere che dal 2014 e questo pull request, è possibile utilizzare l'annotazione @PowerMockRunnerDelegate per "delegare" il contesto di esecuzione a SpringJUnit4ClassRunner (o qualsiasi altro corridore in realtà).

Sopra codice sarà simile:

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class); 
public class MyTest { 

    // Tests goes here 
    ... 
} 

Con questa annotazione, non è necessario più la regola PowerMock!

Problemi correlati