junitのjava.lang.NoClassDefFoundError


82

junitテストコードのJavaでこのエラーが発生します。ネットで調べたところ、クラスパスにjunit.jarを追加する必要があると表示されました。

Eclipseでは、プロジェクトプロパティウィンドウのクラスパスに追加しましたが、それでも初期化エラーが発生します。私は何をすべきか..?

これはエラーの完全なトレースです。

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 25 more

1
エラーに応じてどのクラスが欠落していますか?
BalusC 2010年

回答:


105
  1. パッケージエクスプローラーでプロジェクトを右クリックし、[プロパティ]をクリックします
  2. 「Javaビルドパス」>「ライブラリ」タブに移動します
  3. 「ライブラリの追加」ボタンをクリックします
  4. JUnitを選択します
  5. [次へ]をクリックします。
  6. ドロップダウンボタンでJUnit4または他の新しいバージョンを選択します。
  7. [完了]をクリックします。
  8. それならOK。

これを行うと、ライブラリにJUNITが追加されますが、junit.orgを解決できないと表示されます

5
クラスパスにもHamcrestライブラリがあることを再確認してください。JUnit 4の現在のバージョンは完全に包括的である必要がありますが、パッケージを分割する人もいます。
Berin Loritsch 2010年

Linuxコマンドラインを使用している場合はどうすればよいですか?この瓶はどこに追加しますか?
vipin8169 2014年

上記の手順は正常に機能しており、Eclipseプラグインフォルダーからjarを取得しています。しかし、configureビルドパスにjunit jarファイルを外部jarとして追加すると、正しく機能するはずですか?それは私にとってはうまく
いき

20
  1. Eclipse->トップメニュー->実行->構成の実行
  2. テストのすべてのオカレンスを削除します。テストはYourTest.Method_1()として表示される場合があります。それも削除してください。
  3. 再実行します。Eclipseに新しい構成を構築させます。

補遺:ローカルで「ユーザーライブラリ」を作成し、プロジェクトに追加しました。

hamcrest-core-1.3.jar

junit-4.12.jar


11

JUnitWebサイトからJUnitjarをダウンロードしたが、Hamcrest jarのダウンロードを忘れた場合にも同じ問題が発生する可能性があります。両方が必要です(両方をダウンロードするように指示されていますが、スキップしました!おっと)


10

Mavenで使用する場合は、アーティファクトjunit:junitを4.8.2から4.11などに更新します。


1
これは私にとってNoClassDefFoundError: org/junit...caused by ClassNotFoundException: org.junit.runners.model.InitializationErrorを修正しました。私はJunit4.8を使用していました。4.11への移行は機能しました。
アレックス

6

Eclipseでは、以下の手順に従って上記の問題を解決することができました。

実行するテストファイルを右クリックし、 [実行]-> [実行構成]-> [クラスパス]タブの選択->ブートストラップエントリの選択-> [詳細設定]の選択-> [ライブラリの追加]の選択-> [JUnitの選択]-> [次へ]->ドロップダウンからJUnit4を選択->完了

次に、[適用]-> [実行]を選択します



2

これらの手順は、Filterクラスが欠落していることをエラーが示したときに機能しました(この誤って重複した質問で報告されているように:JUnit:NoClassDefFoundError:org / junit / runner / operation / Filter):

  1. プロジェクトでJUnit4を1回だけ参照するようにしてください(Mavenの性質も削除しましたが、この手順が問題の解決に影響を与えるかどうかはわかりません)
  2. 単体テストを含むファイルを右クリックし、[プロパティ]を選択して、[実行/デバッグ]設定で、そのファイルの起動構成からすべてのエントリを削除します。[適用]をクリックして閉じます。
  3. 単体テストを含むプロジェクトを右クリックし、[プロパティ]を選択して、[実行/デバッグ]設定で、起動構成からJUnitに関連するすべてのエントリを削除します。[適用]をクリックして閉じます。
  4. プロジェクトをクリーンアップし、テストを実行します。

このソリューションのヒントを教えてくれたこれらの回答に感謝します:https//stackoverflow.com/a/34067333/5538923およびhttps://stackoverflow.com/a/39987979/5538923)。


1

以下の手順を試してください。

  1. プロジェクトの実行構成に移動します。[クラスパス]タブで、JUnitライブラリを追加します。
  2. 同じ手順を再試行します。

それは私のために働いた。


1

同じ問題がありました。問題はテストクラスの@ContextConfigurationにあり、サーブレットコンテキストも読み込んでいました。変更するだけです。

@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })

に:

@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })

以上です。このようにして、テストパスにパターン* -context.xmlを持つすべてのファイルのみをロードします。


1
  1. 環境変数JUNIT_HOMEがc:\ JUNITに設定されていることを確認してください。
  2. 次に、実行構成で>クラスパスを選択>外部jarを追加しますjunit-4.11.jar

1

この理由は、「hamcrest-core」jarがjunit jarに直接付属していないため、クラスパスにないためです。したがって、これを解決するには2つの方法があります。

  1. プロジェクトを選択->ビルドパス->ライブラリを追加してjunitを選択します(junitとhamcrest-coreの両方が含まれています)
  2. Mavenリポジトリからhamcrest-coreをダウンロードし、これをクラスパスに追加します。

1

私の2セントを他の答えに追加します。

万が一src/main/java、通常の代わりにテストクラスを作成していないかどうかを確認してくださいsrc/test/java。前者は、何らかの理由で新しいテストクラスを作成する場合のEclipseのデフォルトであり、見落とされる可能性があります。それはそれと同じくらい簡単です。


1

私の場合、ライブラリをクラスパスではなくモジュールパスに追加しました。

JUnitがクラスパスに正しく追加されている場合にのみ機能します。

ここに画像の説明を入力してください


0

このエラーは、hamcrest-libraryまたはhamcrest-coreの2つのバージョンがクラスパスに存在する場合にも発生します。

pomファイルでは、余分なバージョンを除外することができ、それは機能します。


0

Junit4.11.jarでさえhamcrest-core.jarを持っていません。クラスパスに明示的に追加したところ、問題は解決しました。



-1

Javaのバージョンが複数ある場合は、プログラムに干渉する可能性があります。

JCreatorをダウンロードすることをお勧めします。

その場合は、「構成」、「オプション」、および「JDKプロファイル」をクリックします。リストから古いバージョンのJavaを削除します。次に、再生ボタンをクリックします。プログラムが表示されます。

そうでない場合は、ctrl + alt + Oを押してから、再生ボタンをもう一度押します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.