当前位置: 首页 > 面试题库 >

无法使用PowerMockRunner运行JUnit测试

廉鸿运
2023-03-14
问题内容

我有一个基于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)
...

这是我的测试依赖项:

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'

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

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

任何想法可能有什么问题吗?使用PowerMock的其他测试运行正常(没有一个使用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'

您能否在堆栈跟踪中添加更多行,以发现有关该问题的更多详细信息。



 类似资料:
  • 我正在尝试使用IntelliJ Community edition和Gradle5.5.1运行一个Cucumber/Selenium项目。 我的TestRunner类如下:

  • 我在IntelliJ中打开了一个新的Java项目,用Maven作为构建工具,目前有一个类和一个JUnit5测试类。当我指示IntelliJ单独或一起运行测试时,它就可以工作了。但是当我转到终端并点击或从IntelliJ内的Maven窗格中执行相同操作时,它会跳过测试。 然而,与这个类似问题的提问者不同,我没有得到任何错误信息。测试类被找到并编译。我没有同样的问题(不正确的文件命名),他有。 它们是

  • 我有一些Selenium Webdriver测试,希望使用mvn-test从命令行运行。问题是,我可以清理,构建和编译没有问题,但没有测试运行。我没有收到任何与测试有关消息,如“There are no tests to run”。 我的junit测试遵循*Test类命名约定。 编辑:好的,我发现这是一个配置文件的问题-修复!

  • 从很久以前的某个版本开始(大约是1.b.35版),Nutz 就偷偷的加入了 maven 的 pom.xml 文件, 极好的解决了测试时需要依赖其他 jar 包的问题,接下来就让我们使用 Maven 来进行 JUnit 测试吧。 Nutz 在 Github 的 地址为 https://github.com/nutzam/nutz(Git@OSC镜像 https://git.oschina.net/n

  • 确实给了我们单独的JVM,但是JUnit(当然)不知道单独的测试,所以报告是非常无用的。 (c)每个JUnit类一个测试: } 我们显然在这里遗漏了一些东西,因为我们的测试情况并不罕见!任何建议都非常感谢。

  • 我正在尝试使用Zerocode使用Junit(4)运行负载测试。通过遵循这些教程,我能够运行现有的Junit测试类 使用零代码框架使用JUnit进行负载测试 我有一个Junit测试套件可以正常工作,我想知道如何使用zerocode来启动这个测试套件,以便它可以运行负载测试所有测试类中的所有测试。上面的例子描述了如何运行选定的测试方法,或者只运行少数测试方法。