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
補遺:ローカルで「ユーザーライブラリ」を作成し、プロジェクトに追加しました。
hamcrest-core-1.3.jar
junit-4.12.jar
JUnit WebサイトからJUnit jarをダウンロードしたが、Hamcrest jarのダウンロードを忘れた場合にも同じ問題が発生する可能性があります。
Mavenで使用する場合、アーティファクトjunit:junitを更新します。 4.8.2から4.11。
Eclipseでは、以下の手順に従って上記の問題を解決できました。
実行するテストファイルを右クリックします。実行を選択->実行構成->クラスパスタブを選択-> bootstrapエントリを選択->詳細を選択- >ライブラリの追加-> JUnitの選択->次へ->ドロップダウンからJUnit4の選択->完了
次にApply-> Runを選択します
Org/hamcrest/SelfDescribingクラスが実行時クラスパスにありません。
エラーがFilterクラスが欠落していることをエラーが示したときにこれらのステップは機能しました(このfalse-diplicated質問で報告されたように: JUnit:NoClassDefFoundError:org/junit/runner/manipulation/Filter ):
このソリューションのヒントを教えてくれたこれらの回答に感謝します: https://stackoverflow.com/a/34067333/553892 および https://stackoverflow.com/a/39987979/ 553892 )。
私は同じ問題を抱えていました、問題は私のテストクラスの@ContextConfigurationにありました、私はサーブレットコンテキストをロードしていました
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
に:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
以上です。この方法では、テストパスに* -context.xmlというパターンを持つすべてのファイルをロードするだけです。
以下の手順を試してください。
それは私のために働いた。
この理由は、junit jarに直接付属していないため、「hamcrest-core」jarがクラスパスにないためです。したがって、これを解決するには2つの方法があります。
junit 4.11.jarでさえhamcrest-core.jarがありません。クラスパスに明示的に追加し、問題は解決しました。
他の回答に2セントを追加します。
万が一、通常のsrc/main/Java
ではなくsrc/test/Java
の下にテストクラスを作成していないかどうかを確認してください。前者は、何らかの理由で新しいテストクラスを作成するときのEclipseのデフォルトであり、見落とされる可能性があります。それと同じくらい簡単にすることができます。
このエラーは、クラスパスにhamcrest-libraryまたはhamcrest-coreの2つのバージョンが存在する場合にも発生します。
Pomファイルで、余分なバージョンを除外できます。