使用 Powermock 时出现 NoClassDefFoundError

Posted

技术标签:

【中文标题】使用 Powermock 时出现 NoClassDefFoundError【英文标题】:NoClassDefFoundError when using Powermock 【发布时间】:2011-07-14 15:04:12 【问题描述】:

我正在使用PowerMock 测试运行程序运行junit 测试用例。 我正在使用以下命令行来执行它:

java -cp .:junit-4.9b2.jar:easymock-3.0.jar:powermock-easymock-1.4.8-full.jar org.junit.runner.JUnitCore SampleTest

这样做时我收到此错误:

initializationError(SampleTest)
java.lang.NoClassDefFoundError: org/junit/internal/runners/TestClassRunner
...

我该如何解决?

【问题讨论】:

【参考方案1】:

我现在刚刚解决了这个,当我添加@RunWith(PowerMockRunner.class)属性时,eclipse自动导入:

import org.powermock.modules.junit4.legacy.PowerMockRunner;

我需要做的就是将其更改为:

import org.powermock.modules.junit4.PowerMockRunner;

现在它可以很好地与JUnit 4.8.2 一起使用。

第二个跑步者适用于使用旧版本的JUnit - 特别是4.3 和更早版本。

【讨论】:

非常感谢您的回答。对于使用 maven 的任何人,这也可能是由于使用了错误的 powermockito-junit 依赖项造成的。确保 junit4.0-4.3 包含 powermock-module-junit4-legacyjunit4.4 或更新版本包含 powermock-module-junit。检查this pom configuration【参考方案2】:

见here

您可能使用了错误的 PowerMockRunner。有一个为 JUnit 4.4 及更高版本制作的跑步者,另一个为 JUnit 4.0-4.3 制作的跑步者(尽管后者也适用于 JUnit 4.4 的一些较旧的次要版本)。 尝试从 org.powermock.modules.junit4.PowerMockRunner 切换到 org.powermock.modules.junit4.legacy.PowerMockRunner,反之亦然。查看getting started guide 了解如何在 maven 中进行配置。

【讨论】:

【参考方案3】:

当您在使用 JUnit 4.X 或更高版本时导入旧版本的 PowerMockRunner.class 时会发生此异常,因为在使用 @RunWith 注释时无法运行此旧类。我通过用新版本替换旧的旧版本导入解决了这个问题。

导入错误:

import org.powermock.modules.junit4.legacy.PowerMockRunner;

正确导入:

import org.powermock.modules.junit4.PowerMockRunner;

【讨论】:

【参考方案4】:

我解决了这个问题。我使用的是旧版本的 junit-4.0.jar。但是我仍然不明白为什么缺少类TestClassRunner,尤其是在包powermock-easymock-junit-1.4.8.zip(有junit-4.8.2.jar)中? junit-4.8.2.jar 也缺少类 TestClassRunner。

【讨论】:

这不是正确的解决方案 - 只是一种解决方法。看我的回答【参考方案5】:

我正在使用 JUnit 4.0 - 4.3 并且我更新了我的 maven 依赖项以使用 powermockito 2.0.0-beta.5 版本。它刚刚开始工作。

 <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.0-beta.5</version>
    <scope>test</scope>
 </dependency>
 <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.0-beta.5</version>
    <scope>test</scope>
  </dependency>

【讨论】:

以上是关于使用 Powermock 时出现 NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

解决Exception:Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassD

IDEA启动报错Internal error. Please report to http://jb.gg/ide/critical-startup-errors java.lang.NoClassD

PowerMock框架讲解及使用

单元测试-PowerMock

如何用powermockrunner覆盖循环

powermock, 强力模拟