使用@RunWith Annotation和powerMock时出现问题

最初我在junits中只使用Mockito所以我在@RunWith注释中使用了SpringJUnit4ClassRunner.class,即

@RunWith(SpringJUnit4ClassRunner.class) 

由于春季dependency injection工作正常,并正在通过

 @Autowired Someservice someservice ; 

但现在,我还在其中集成了PowerMock。

所以根据doc ,我已经用@RunWith注释替换了提到的类

 @RunWith(PowerMockRunner.class) 

但是现在,有些服务似乎是空的。 有没有办法在@RunWith注释中同时使用SpringJUnit4ClassRunner.classPowerMockRunner.class

您必须使用PowerMockRule 。

 @RunWith(SpringJUnit4ClassRunner.class) @PrepareForTest(X.class) public class MyTest { @Rule public PowerMockRule rule = new PowerMockRule(); // Tests goes here ... } 

有关使用PowerMock和Mockito进行Spring集成测试的完整示例,您可以查看此maven项目 。

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

看看家属的依赖性。

 less pom.xml 

然后运行测试

 mvn test 

你应该得到以下测试结果:

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

我知道这个线程已经过时了,但是最好补充一点,自2014年和这个拉取请求之后 ,你可以使用@PowerMockRunnerDelegate注释将运行上下文“委托”给SpringJUnit4ClassRunner (或任何其他运行者)。

上面的代码看起来像:

 @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) @PrepareForTest(X.class); public class MyTest { // Tests goes here ... } 

使用此注释,您不再需要PowerMock规则!