私はこの質問がかなり一般的であることを知っていますが、このエラーが表示される理由に関するヒントを見つけていません。 EclipseウィンドウにinitalizationErrorが表示される可能性のある原因は何ですか?長くて役に立たない障害トレースだけでは有用な情報は得られません(ここには含まれていません)。
JUnit 4.11を使用しています
私は次のコードを書きました-それが機能するかどうかを確認するためだけに:
package test;
import static org.junit.Assert.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class SimpleTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void test() {
assertEquals(15, 15);
}
}
編集:申し訳ありませんが、Eclipseウィンドウでは、実際には「障害トレース」と呼ばれています。
Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at
Java.lang.ClassLoader.defineClass1(Native Method) 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$100(Unknown Source) at
Java.net.URLClassLoader$1.run(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:10)
at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at
org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:26)
at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at
org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:26)
at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.Java:33)
at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.Java:25)
at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:48)
at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:38)
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.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
おそらく次の2つの問題のいずれかがあります。
1)hamcrestを含まないJUnit 4.11を使用しています。 hamcrest 1.3ライブラリをクラスパスに追加します。
2)クラスパスにhamcrest 1.3がありますが、クラスパスにjunitまたはhamcrestの別のバージョンがあります。
背景として、4.11より前のjunitには、hamcrest 1.1の縮小版が含まれていました。 4.11はこれらのクラスを削除しました。
私にとってそれはばかげた間違いでした。テストを誤ってpublicではなくprivateに設定しました:
@Test
private void thisTestWasCausingProblems() {
...
}
あるべきだった
@Test
public void thisTestIsOK() {
...
}
「プロジェクト>クリーン...」を試してください-Eclipseの多くの問題の解決策のようです!
私にとっては、JUnitアノテーション付きメソッドの1つにstatic
キーワードがありませんでした。例:
@AfterClass
public static void cleanUp() {
// ...
}
クラスに@Ignoreアノテーションが付けられたときにこのエラーを受け取り、それを右クリックして特定のテストを実行しようとしました。 @Ignoreを削除すると、問題が修正されました。
私はまったく同じエラーを実験しました。私の問題は、作成したSetUpメソッドが静的として宣言されたことでした。
Eclipseを使用している場合、エラーの上をクリックして、すぐ下にある[失敗トレース]ウィンドウを確認することで、適切な説明を得ることができます。
また、すべての@Before
-、@After
-、およびすべてのJUnitアノテーション付きメソッドがpublic
として宣言されていることを確認してください。私はprivate
として問題を引き起こしたと宣言しました。
この問題は、クラスにプライベートルールがある場合にも発生します。
@Rule
private TemporaryFolder folderRule;
公開します。
私にとっては、コモンズロギングと関係がありました。私が使っていたので
@RunWith(SpringJUnit4ClassRunner.class)
これで問題が解決しました
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
私の間違いは、テストメソッドの@Testアノテーションを逃したことです。
私にとって、それはテストメソッドの「戻り型」によるものでした。 「ボイド」である必要があります
同じ問題と同じメッセージがありました。 Java Building Pathにhamcrest-all-1.3.jar
アーカイブをインポートすることで修正できました。 JUnit 4.12バージョンを使用しています。
同じ問題が発生しました。一度Excelパスの問題が発生し、それ以外の場合は@Test
アノテーションが欠落していました。
私の問題は、親クラスに@Test
メソッドがなかったことです。そこでは、いくつかのユーティリティのみを使用しました。 abstract
と宣言したときに機能します。
私の場合、テストケースで次のインポートを行いました。
import org.junit.jupiter.api.Test;
正しいインポートは次のとおりです。
import org.junit.Test;
Junitから古いテストタイプをインポートするだけでなく、正しいタイプを選択してください。
Xtend言語(または型推論を備えた他のJVM言語)を使用していて、戻り値の型を明示的に定義していない場合、最後の式のために戻り値の型が非void型に設定され、JUnitが失敗します。
別の失敗トレースを取得しましたが、将来の訪問者がお気に入りの検索エンジンを使用する場合:
私にとっての問題は、Eclipseがテストクラスで単一のメソッドのみを実行することをどういうわけか決定したことでした(ただし、理由はわかりませんでした)。特に、セットアップで何も変更しなかった場合は、実行構成を確認してください。
私の場合、pom.xmlのプロジェクト名を変更したため、新しいターゲットディレクトリが生成され、junitは古いディレクトリのクラスを検索していました。 EclipseでもJUnitのディレクトリを変更する必要があります
Properties -> Java Build Path -> Source (Default output folder)
また、同じウィンドウにリストされているソースフォルダーの一部が以前のディレクトリ名を持っている可能性があるため、確認してください。それらも変更する必要があります。
Junit 4.11はSpring Testフレームワークでは動作しません。また、このリンク Spring + Junitを使用する場合の初期化エラー では、Eclipseでjunit initalizationErrorをデバッグする方法について説明しています。
私は同じ問題を抱えていました... JUnit依存関係スコープを持つMavenビルドツールを「テスト」として使用し、@ Testメソッドはメインモジュールにありました。
解決するには、1。pom.xmlでJUnit依存関係のスコープタグにコメントを付けました。2.パッケージを再構築しました。3. Testクラスにコンストラクターが1つしかないことを確認しました。
問題は2つに分かれます。1. JUnit依存関係はテストスコープに限定され、@ Testメソッドはメインスコープにあります。2.テストクラスには複数のコンストラクターがあります。
私にとって、初期化エラーの原因となったテストメソッドに誤ってパラメーターを追加しました。
私は同じ問題を抱えていた、私のための解決策は次のとおりです。
Webからjunit.jarファイルのみをインストールしましたが、hacrest-core.jarに関連するこのライブラリはhacrest-core.jarファイルをダウンロードし、プロジェクトに追加したときにすべて正常に動作します。
Poi.Apache.orgのjunit-4.12.jarをEclipseのBuild Pathに単純に追加しました。私はそれを削除し(プロジェクト、プロパティ、Javaビルドパス、ライブラリ、junit-4.12.jar、削除)、テストクラスでCtrl-1を押した後、Eclipseが「プロジェクト設定を修正」できるようにしました。これ以上の問題はありません! :-)
私にとって、解決策は無効にする必要のあるメソッドの1つであり、ブール値でした。
これが役立つ場合は、Junit5を使用していましたが、@ RunWith(SpringRunner.class)がimport org.springframework.test.context.junit4.SpringRunnerを指していました。私はこれを修正し、機能しました。