2012-08-28 7 views
9

Początkowo używałem tylko Mockito w junits więc używałem SpringJUnit4ClassRunner.class w @RunWith adnotacji tjproblemy podczas korzystania @RunWith adnotacji i powerMock

@RunWith(SpringJUnit4ClassRunner.class) 

dzięki którym wtrysk zależność sprężyna działa dobrze i był coraz fasola przez

@Autowired 

Someservice someservice ; 

Ale teraz, ja również włączyłem PowerMock w tym.

Tak jak za doc, Wymieniłem klasa wspomniano w @RunWith adnotacji z

@RunWith(PowerMockRunner.class) 

ale teraz someservice zbliża się zerowa. Czy istnieje sposób, aby wykorzystać zarówno SpringJUnit4ClassRunner.class i PowerMockRunner.class w @RunWith adnotacji

Odpowiedz

13

Musisz użyć PowerMockRule.

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

    // Tests goes here 
    ... 
} 

dla pełnego przykład test integracyjny na wiosnę z PowerMock i Mockito, można kasy to maven project.

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

Spójrz na zależność, aby powermock.

less pom.xml 

a następnie uruchomić test

mvn test 

i należy uzyskać następujące wyniki badań:

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

Hej gontard, próbowałem twojego rozwiązania, ale kiedy wykonywałem swój junit, otrzymałem wyjątek, że "zasada" PowerMockRule powinna być publiczna, więc upubliczniłam ją i teraz otrzymuję javassist.NotFoundException. jakieś pomysły? exeption java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 \t na org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) \t na org.powermock.core.classloader.MockClassLoader.loadModifiedClass (MockClassLoader .java: 147) .... – Bhuvan

+0

@bhuvan Nie wiem, być może to [ten problem] (http://code.google.com/p/powermock/issues/detail?id=350). Ukończę też odpowiedź. – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - ten link już nie działa. –

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

Znam ten wątek jest stary, ale dobrze jest dodać od 2014 r. i tego pull request można użyć adnotacji @PowerMockRunnerDelegate, aby "przekazać" kontekst uruchamiania do SpringJUnit4ClassRunner (lub jakikolwiek inny biegacz naprawdę).

Powyższy kod wyglądałby następująco:

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

    // Tests goes here 
    ... 
} 

Dzięki tej adnotacji, nie trzeba już regułę PowerMock!