14

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

@RunWith(SpringJUnit4ClassRunner.class) 

由于哪个spring依赖注入工作正常并且正在通过一个bean

@Autowired

Someservice someservice ;

但现在,我也将 PowerMock 集成在其中。

因此,根据doc,我已将 @RunWith 注释中提到的类替换为

@RunWith(PowerMockRunner.class)

但是现在, someservice 即将为空。有没有办法在 @RunWith 注释中同时使用SpringJUnit4ClassRunner.classPowerMockRunner.class

4

2 回答 2

16

我知道这个线程很旧,但是从 2014 年和这个pull request开始添加它是很好的,您可以使用@PowerMockRunnerDelegate注释将运行上下文“委托”给SpringJUnit4ClassRunner(或任何其他跑步者)。

上面的代码看起来像:

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

    // Tests goes here
    ...
}

有了这个注解,你就不再需要 PowerMock 规则了!

于 2017-02-09T10:12:15.220 回答
15

您必须使用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/

查看 powermock 的依赖项。

less pom.xml

然后运行测试

mvn test

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

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
于 2012-08-28T12:00:57.883 回答