2012-08-28 63 views
9

起初,我只使用在的Mockito這樣junits我在@RunWith註釋使用SpringJUnit4ClassRunner.class即問題,同時使用@RunWith註釋和powerMock

@RunWith(SpringJUnit4ClassRunner.class) 

由於其彈性的依賴注入工作正常,而且正在一個豆通過

@Autowired 

Someservice someservice ; 

但現在,我也集成了PowerMock。

在@RunWith批註與

@RunWith(PowerMockRunner.class) 

但現在提到所以按照doc,我已經取代了階級,someservice是走出來爲空。是否有@RunWith註釋

回答

13

同時使用SpringJUnit4ClassRunner.classPowerMockRunner.class的方式,您必須使用PowerMockRule

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

    // Tests goes here 
    ... 
} 

對於Spring集成測試與PowerMock和的的Mockito一個完整的例子,你可以結帳這個maven project

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

看看powermock的依賴關係。

less pom.xml 

,然後運行測試

mvn test 

,你應該得到的試驗結果如下:

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

嘿gontard,我試過你的解決方案,但是當我執行我的junit時,我得到一個異常,PowerMockRule「規則」應該公開,所以我公開了它,現在我得到了javassist.NotFoundException。有什麼想法嗎? exeption了java.lang.RuntimeException:javassist.NotFoundException:$ Proxy88 \t在org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:187) \t在org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader .java:147).... – Bhuvan

+0

@bhuvan我不知道,也許這是[這個問題](http://code.google.com/p/powermock/issues/detail?id=350)。我也完成了我的回答。 – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - 此鏈接不再有效。 –

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

我知道這個線程是舊的,但它是很好的補充從2014年和這pull request,您可以使用@PowerMockRunnerDelegate註釋「委託」運行上下文到SpringJUnit4ClassRunner(或其他任何跑步者)。

上面的代碼如下所示:

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

    // Tests goes here 
    ... 
} 

有了這個註解,你不需要PowerMock規則了!