2012-08-28 13 views
9

Anfangs war ich nur Mockito in junits mit so ich SpringJUnit4ClassRunner.class in @RunWith Anmerkung dhProbleme bei der Verwendung von @RunWith Annotation und PowerMock

@RunWith(SpringJUnit4ClassRunner.class) 

aufgrund dessen Feder Dependency Injection wurde mit war in Ordnung zu arbeiten und wurde immer eine Bohne durch

@Autowired 

Someservice someservice ; 

Aber jetzt habe ich auch PowerMock darin integriert.

So wie pro doc, ich habe in @RunWith Anmerkung erwähnt ersetzt Klasse mit

@RunWith(PowerMockRunner.class) 

aber jetzt kommt SOME null sein wird. Gibt es eine Möglichkeit, sowohl SpringJUnit4ClassRunner.class und PowerMockRunner.class in @RunWith Anmerkung

Antwort

13

Sie verwenden müssen die PowerMockRule verwenden.

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

    // Tests goes here 
    ... 
} 

Ein vollständiges Beispiel des Frühlings-Integrationstest mit PowerMock und Mockito, könnten Sie diese maven project Kasse.

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

Blick auf die dependecies PowerMock.

less pom.xml 

und dann den Test ausführen

mvn test 

und Sie sollten die folgenden Testergebnisse erhalten:

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

Hey gontard, ich habe deine Lösung versucht, aber als ich mein junit ausführte, bekam ich eine Ausnahme, dass PowerMockRule "Regel" öffentlich sein sollte, also machte ich es öffentlich und jetzt bekomme ich die javassist.NotFoundException. Irgendwelche Gedanken? exeption java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 \t bei org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) \t bei org.powermock.core.classloader.MockClassLoader.loadModifiedClass (MockClassLoader .java: 147) .... – Bhuvan

+0

@bhuvan ich weiß nicht, vielleicht ist es [diese Ausgabe] (http://code.google.com/p/powerermock/issues/detail?id=350). Ich vervollständige meine Antwort auch. – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - Dieser Link funktioniert nicht mehr. –

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

Ich weiß, dieser Thread ist alt, aber es ist gut hinzufügen Seit 2014 und pull request können Sie die @PowerMockRunnerDelegate Annotation verwenden, um den Ausführungskontext an"delegieren"(oder irgendein anderer Läufer wirklich).

Above Code würde wie folgt aussehen:

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

    // Tests goes here 
    ... 
} 

Mit dieser Anmerkung, Sie mehr die PowerMock Regel nicht brauchen!

Verwandte Themen