使用Powermock时NoClassDefFoundError

luk*_*kas 30 java junit unit-testing easymock powermock

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

java -cp .:junit-4.9b2.jar:easymock-3.0.jar:powermock-easymock-1.4.8-full.jar org.junit.runner.JUnitCore SampleTest
Run Code Online (Sandbox Code Playgroud)

这样做时,我收到此错误:

initializationError(SampleTest)
java.lang.NoClassDefFoundError: org/junit/internal/runners/TestClassRunner
...
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Ron*_*onK 82

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

import org.powermock.modules.junit4.legacy.PowerMockRunner;
Run Code Online (Sandbox Code Playgroud)

我需要做的就是改变它:

import org.powermock.modules.junit4.PowerMockRunner;
Run Code Online (Sandbox Code Playgroud)

现在它可以正常使用JUnit 4.8.2.

第二个跑步者适用于旧版本的运行JUnit- 特别是旧版本4.3.


jua*_*uan 7

看到这里

您可能使用了错误的PowerMockRunner.有一个为JUnit 4.4及以上版本制作的跑步者和为JUnit 4.0-4.3制作的第二个跑步者(尽管后者也适用于JUnit 4.4的一些较旧的次要版本).
尝试从org.powermock.modules.junit4.PowerMockRunner切换到org.powermock.modules.junit4.legacy.PowerMockRunner,反之亦然.查看入门指南,了解如何在maven中配置它.


小智 5

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

不正确的导入:

import org.powermock.modules.junit4.legacy.PowerMockRunner;
Run Code Online (Sandbox Code Playgroud)

正确导入:

import org.powermock.modules.junit4.PowerMockRunner;
Run Code Online (Sandbox Code Playgroud)


luk*_*kas 1

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