使用@RunWith注释和 powerMock 时出现的问题

2022-09-03 18:02:24

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

@RunWith(SpringJUnit4ClassRunner.class) 

由于弹簧依赖注入工作正常,并且通过豆子

@Autowired

Someservice someservice ;

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

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

@RunWith(PowerMockRunner.class)

但是现在,某些服务显示为 null。有没有办法在@RunWith注释中同时使用SpringJUnit4ClassRunner.classPowerMockRunner.class


答案 1

我知道这个线程是旧的,但最好补充一点,自2014年和这个拉取请求以来,你可以使用注释将运行上下文“委托”给(或任何其他运行器)。@PowerMockRunnerDelegateSpringJUnit4ClassRunner

上面的代码看起来像这样:

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

    // Tests goes here
    ...
}

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


答案 2

你必须使用PowerMockRule

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

    // Tests goes here
    ...
}

有关与PowerMock和Mockito的Spring Integration Test的完整示例,您可以查看此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

推荐