无法使用PowerMockRunner运行JUnit测试

Ben*_*Ben 53 java junit exception powermock

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

错误:

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)
...
Run Code Online (Sandbox Code Playgroud)

这是我的测试依赖项:

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'
Run Code Online (Sandbox Code Playgroud)

完全为空时(初始化错误),测试本身也会失败:

@RunWith(PowerMockRunner.class)
public class SomeTest {
    @Test
    public void testSomething() {
    }
}
Run Code Online (Sandbox Code Playgroud)

什么想法可能是错的?使用PowerMock的其他测试工作正常(它们都没有使用PowerMockRunner).

问候和感谢任何帮助!本

Ste*_*ner 77

这是使用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'
Run Code Online (Sandbox Code Playgroud)

如果您无法升级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'
Run Code Online (Sandbox Code Playgroud)

你能不能再添加一些堆栈跟踪,它可以发现有关问题的更多细节.

  • 幸运的是,这已通过PowerMock 1.6.1得到修复. (3认同)
  • @JeeBee它似乎也没有在`1.6.1`中修复.我使用Powemock`1.6.1`和JUnit`4.12. (3认同)