无法使用PowerMockRunner运行JUnittesting

我有一个基于Gradle的Java项目,现在我想用PowerMock来模拟私有方法。 问题是,我无法使用PowerMockRunner,因为当我添加@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)注释时,我总是得到以下exception。

错误:

 org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator. at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581) at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49) at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108) ... 

这是我的testing依赖关系:

 testCompile 'junit:junit:4.+', 'org.powermock:powermock-core:1.5.6', 'org.powermock:powermock-module-junit4:1.5.6', 'org.powermock:powermock-api-mockito:1.5.6' 

testing本身在完全空的时候也会失败(初始化错误):

 @RunWith(PowerMockRunner.class) public class SomeTest { @Test public void testSomething() { } } 

任何想法可能是错的? 使用PowerMock的其他testing工作正常(他们都没有使用PowerMockRunner)。

问候和感谢任何帮助! 本

这是使用JUnit 4.12和PowerMock <1.6.1时发生的错误。 在PowerMock 1.6.1中解决了这个问题。 请相应地更新您的依赖关系

 testCompile 'junit:junit:4.12', 'org.powermock:powermock-core:1.6.1', 'org.powermock:powermock-module-junit4:1.6.1', 'org.powermock:powermock-api-mockito:1.6.1' 

如果你不能升级PowerMock,那么你可以使用JUnit 4.11。

 testCompile 'junit:junit:4.11', 'org.powermock:powermock-core:1.5.6', 'org.powermock:powermock-module-junit4:1.5.6', 'org.powermock:powermock-api-mockito:1.5.6' 

你可以添加更多的堆栈跟踪,发现更多的细节问题。

有一个错误loggingPowerMock: https : //code.google.com/p/powermock/issues/detail? id = 531

看来JUnit改变了PowerMock通过reflection访问的一些内部字段名称,从而打破了PowerMock正确注入的能力。

检查斯特凡说什么,以上,你也需要添加

 @PrepareForTest({<The class/es you are Mocking>, ...}) 

没有准备testing,PowerMockRunner将不知道哪个类被嘲笑。