使用Powermock时出现NoClassDefFoundError错误

41

我正在使用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
...

我该如何修复它?

5个回答

88

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

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

我所需要做的就是将它改成:

import org.powermock.modules.junit4.PowerMockRunner;

现在它可以与JUnit 4.8.2正常工作。

第二个运行程序是为了与旧版本的JUnit一起运行,特别是4.3及更早的版本。


1
非常感谢您的答复。对于使用maven的任何人来说,这也可能是由于使用错误的powermockito-junit依赖项引起的。请确保包含 powermock-module-junit4-legacy 用于 junit4.0-4.3powermock-module-junit 用于 junit4.4或更新版本。请检查 此pom配置 - emrekgn

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中配置。


7
这个异常在使用JUnit 4.X或更高版本时,当导入PowerMockRunner.class的旧版本时发生,因为这个旧版类不能在使用@RunWith注解时运行。我通过将旧版本导入替换为新版本来解决了这个问题。 错误的导入:
import org.powermock.modules.junit4.legacy.PowerMockRunner;

正确的导入方式:

import org.powermock.modules.junit4.PowerMockRunner;

尽管在PowerMock Maven设置中提到4.0-4.3 JUnit应该使用powermock-module-junit4-legagcy构件,但仍会出现上述错误。 - Himanshu Shukla

1

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


这不是正确的解决方案 - 仅仅是一个权宜之计。请看我的答案。 - RonK

0

我正在使用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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接