使用Powermock时NoClassDefFoundError

时间:2011-03-13 21:14:35

标签: java unit-testing junit 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

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

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

我该如何解决?

5 个答案:

答案 0 :(得分:76)

我刚刚解决了这个问题,当我添加@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 :(得分:6)

请参阅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中配置它。

答案 2 :(得分:2)

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

导入不正确:

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

正确导入:

import org.powermock.modules.junit4.PowerMockRunner;

答案 3 :(得分:0)

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

答案 4 :(得分: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>