web-dev-qa-db-ja.com

junitのjava.lang.NoClassDefFoundError

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
70
user506710
  1. パッケージエクスプローラーでプロジェクトを右クリックし、[プロパティ]をクリックします。
  2. Java Build Path> Librariesタブに移動します
  3. 「ライブラリを追加」ボタンをクリックします
  4. jUnitを選択
  5. 次へをクリックします。
  6. ドロップダウンボタンJUnit4またはその他の新しいバージョンで選択します。
  7. 完了をクリックします。
  8. じゃあ.
95
Chris Dennett
  1. Eclipse->トップメニュー->実行->実行構成
  2. テストのすべての発生を削除します。テストはYourTest.Method_1()として表示される場合があります。それも削除します。
  3. 再実行します。 Eclipseに新しい構成を作成させます。

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

hamcrest-core-1.3.jar

junit-4.12.jar

19
deepSymmetry

JUnit WebサイトからJUnit jarをダウンロードしたが、Hamcrest jarのダウンロードを忘れた場合にも同じ問題が発生する可能性があります。

11
Alex

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

9
Tires

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

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

次にApply-> Runを選択します

3
Sana Jahan

Org/hamcrest/SelfDescribingクラスが実行時クラスパスにありません。

エラーがFilterクラスが欠落していることをエラーが示したときにこれらのステップは機能しました(このfalse-diplicated質問で報告されたように: JUnit:NoClassDefFoundError:org/junit/runner/manipulation/Filter ):

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

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

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

私は同じ問題を抱えていました、問題は私のテストクラスの@ContextConfigurationにありました、私はサーブレットコンテキストをロードしていました

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

に:

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

以上です。この方法では、テストパスに* -context.xmlというパターンを持つすべてのファイルをロードするだけです。

1
Defrag

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

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

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

1
Amit

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

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

junit 4.11.jarでさえhamcrest-core.jarがありません。クラスパスに明示的に追加し、問題は解決しました。

0
Rohit Sharma

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

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

0
badbishop

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

Pomファイルで、余分なバージョンを除外できます。

0
Ujjwal