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

时间:2012-08-28 11:59:15

标签: java junit mockito powermock

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

@RunWith(SpringJUnit4ClassRunner.class) 

由于春季依赖注入工作正常并且正在通过

获取bean
@Autowired

Someservice someservice ;

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

因此,根据doc,我已用@RunWith注释取代了

中提到的类
@RunWith(PowerMockRunner.class)

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

2 个答案:

答案 0 :(得分:14)

您必须使用PowerMockRule

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

    // Tests goes here
    ...
}

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

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

答案 1 :(得分:13)

我知道这个帖子已经过时了,但是自2014年以及pull request添加它之后,您可以使用@PowerMockRunnerDelegate注释将运行上下文“委托”到SpringJUnit4ClassRunner(或任何其他跑步者真的)。

以上代码如下:

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

    // Tests goes here
    ...
}

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