web-dev-qa-db-ja.com

Powermock使用時のNoClassDefFoundError

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
...

どうすれば修正できますか?

30
lukas

@RunWith(PowerMockRunner.class)属性を追加すると、Eclipseが自動的にインポートされて、これを解決しました:

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

私がする必要があるすべてはそれを次のように変更することです:

import org.powermock.modules.junit4.PowerMockRunner;

そして今、JUnit 4.8.2

2番目のランナーは、古いバージョンのJUnit、具体的には4.3以前。

79
RonK

こちら を参照

おそらく間違ったPowerMockRunnerを使用しています。 JUnit 4.4以降用に作成された1つのランナーと、JUnit 4.0-4.3用に作成された2つ目のランナーがあります(後者は、JUnit 4.4の古いマイナーバージョンでも機能します)。
org.powermock.modules.junit4.PowerMockRunnerからorg.powermock.modules.junit4.legacy.PowerMockRunnerに、またはその逆に切り替えてみてください。 入門ガイド を見て、Mavenでこれを構成する方法を確認してください。

7
juan

この例外は、JRun 4.X以降のバージョンを使用しているときにPowerMockRunner.classのレガシーバージョンをインポートすると発生します。これは、このレガシークラスを@RunWithアノテーションとともに使用すると実行できないためです。古いバージョンのインポートを新しいバージョンに置き換えることで、この問題を解決しました。

不正なインポート:

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

正しいインポート:

import org.powermock.modules.junit4.PowerMockRunner;
3
Shreeram Reddy

私は問題を解決しました。古いバージョンのjunit-4.0.jarを使用しました。しかし、なぜpowermock-easymock-junit-1.4.8.Zipパッケージ(junit-4.8.2.jarがある)にTestClassRunnerクラスが欠落しているのか、それでも理解できません。 junit-4.8.2.jarにもTestClassRunnerクラスがありません。

1
lukas

私は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>