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

15

最初我只在Junit中使用Mockito,因此我在@RunWith注释中使用了SpringJUnit4ClassRunner.class

@RunWith(SpringJUnit4ClassRunner.class) 

由此Spring依赖注入工作正常,并且通过获取bean实现了功能。

@Autowired

Someservice someservice ;

但是现在,我还将PowerMock集成了进去。

所以根据文档,我已经用其中提到的类替换了@RunWith注释中的类。

@RunWith(PowerMockRunner.class)

但现在,someservice成为了null。有没有一种方法可以在@RunWith注释中使用SpringJUnit4ClassRunner.classPowerMockRunner.class

2个回答

17

我知道这个讨论串很旧了,但是自从2014年和这个拉取请求以来,你可以使用@PowerMockRunnerDelegate注释将运行上下文“委派”给SpringJUnit4ClassRunner(或任何其他运行器)。

上面的代码看起来像:

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

    // Tests goes here
    ...
}

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


16

你需要使用PowerMockRule

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

    // Tests goes here
    ...
}

如果您想要一个完整的 Spring 集成测试示例,其中包括 PowerMock 和 Mockito,您可以检查这个 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

嘿,gontard,我尝试了你的解决方案,但是当我执行我的JUnit时,我遇到了一个异常,即PowerMockRule“rule”应该是公共的,所以我将其设置为公共的,现在我得到了javassist.NotFoundException。有什么想法吗?异常java.lang.RuntimeException:javassist.NotFoundException:$Proxy88 在org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:187) 在org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:147) .... - Bhuvan
@bhuvan 我不知道,也许是这个问题。我已经完成了我的回答。 - gontard
4
@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ -- 这个链接已经失效了。 - old-monk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接