使用 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-legacy
,junit4.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