无法使用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将不知道哪个类被嘲笑。