EclipseでJUnitテストを実行すると、このエラーが発生します。
Class not found com.myproject.server.MyTest
Java.lang.ClassNotFoundException: com.myproject.server.MyTest
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:423)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:356)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.Java:693)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.Java:429)
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)
Mavenを使用しているにもかかわらず、クラスパスにJUnit
ライブラリを追加しようとしました。JUnitライブラリはPOM依存関係にあります。
私はすでにプロジェクトのクリーニングを試み、Eclipse用のJUnitプラグインを使用して新しいJUnitテストケースを作成しましたが、それでも同じエラーが発生します。
これは、mvn clean compile
を使用するとソースコードのみがコンパイルされるために発生するようです(maven 3.1.0を使用しているため、常にこのように動作するかどうかはわかりません)。
mvn test
を実行すると、テストコードもコンパイルされますが、テストが実行されます(Eclipseでテストを実行しようとしている場合、すぐには望ましくない場合があります)。これを回避するには、Mavenコマンドにtest-compile
を追加しますmvn clean
を実行するたびにシーケンスします。たとえば、mvn clean compile test-compile
を実行します。
私のテストでも同様の問題が発生し、WebのどこかでプロジェクトのプロパティのBuild Pathに移動してMaven Dependencies above JREシステムライブラリ。それは私のために働いたようです。
私は同じ問題に直面し、@ slomekの answer を使用してそれを修正することができましたが、問題はその後再浮上しました。
最後に、プロジェクトの出力フォルダーをJUnitテストの実行構成に追加して修正しました。手順は次のとおりです。
Project properties -> Java Build Path -> Default output folder
からプロジェクトの出力フォルダーを見つけます。<project-folder>/bin
ですRun -> Run Configurations...
に移動しますClasspath
タブをクリックしますUser Entries
の下に明示的に追加します-プロジェクトが既に含まれている場合でもAdvanced -> Add folder
をクリックして、出力フォルダーを追加しますこの問題は、Eclipseでの奇妙なプロジェクトのセットアップが原因である可能性があります。ネストされたMavenプロジェクトが単一のプロジェクト/フォルダーとしてインポートされたソースフォルダー(少なくともそれが私のプロジェクトのセットアップ方法でした)。
この問題がEclipseでのみ発生する場合は、選択したプロジェクトでコマンドProject-> Clean ...を実行すると役立つ場合があります。
ここですべてを改善せずに試した後、Eclipseを再起動するだけで問題を解決しました
私の場合、間違ったMavenディレクトリ構造がありました。
次のようになります:
/ src/test/Java / com.myproject.server.MyTest
それを修正した後、すべてが魅力のように機能しました。
私の場合、次の手順だけがこの問題の解決に役立ちました。
2つのリソースディレクトリを持つテストSourceSetを使用したGradleプロジェクトでも同じ問題が発生しました。
このスニペットはmain-module.gradleから取得され、リソースディレクトリをテストSourceSetに追加します。
sourceSets {
test {
resources {
srcDir('../other-module/src/test/resources')
}
}
}
これを行うには、プロジェクトのメインモジュールのテストSourceSetに関連する2つのリソースディレクトリがありました。
../other-module/src/test/resources src/test/resources(main-moduleフォルダーに対して、Javaプラグインによって自動的に追加されます)
両方のソースディレクトリに同じ名前のファイルが2つあると、プロセスリソースの段階で問題が発生したことがわかります。その結果、コンパイルは開始されず、このため、JUnitがクラスを探していたbinディレクトリに.classはコピーされませんでした。 ClassNotFoundExceptionは、2つのファイルのいずれかの名前を変更しただけで消えました。
NoClassDefFoundErrorは、クラスを初期化できないことを意味します。クラスを見つけることに関係するnothingがあります。 null文字列でtrim()を呼び出すと、このエラーが発生しました。
JUnitはNullPointerExceptionを表示しません。テストに使用できないプロパティファイルから文字列を取得しているため、通常実行中の文字列はnullではありません。
テストが合格し始めるまで、クラスからピースを削除することをお勧めします。その後、エラーが発生している行を特定できます。
以前、この場合、私は常にmvn Eclipse:eclipse
を実行し、Eclipseを再起動しました。 GITに移行した後、私にとっては機能しなくなりました。
ここでの基本的な問題は、Mc Eclipseがコンパイルされたクラスを見つけられないことです。次に、出力フォルダーをProject/target/test-classesとして設定します。これは、テストをスキップせずにデフォルトでmvn clean install
によって生成され、次の回避策を進めました。
オプション1:各テストケースのクラスパスを設定する
Eclipse->実行->実行構成-> JUnitの下-> mytestの選択->クラスパスタブの下->ユーザーエントリの選択->詳細設定->フォルダの追加->選択->適用->実行
オプション2:クラスパス変数を作成し、すべてのテストケースのクラスパスに含める
Eclipse-> Windows-> Classpath Variables-> New-> [Name:Junit_test_cases_cp | path:]-> ok次にEclipse-> Run-> Run Configurations-> JUnit-> select mytest-> classpath tab-> Select User Entries-> Advanced-> Add classpath variables-> Select Junit_test_cases_cp-> ok- >適用->実行
これは、オンラインですべての提案を試した後、現在私のために働いている唯一のものです。
私は同じ問題に直面していました。インターネットから外部からダウンロードして追加した外部JUnit jar依存関係を削除することで解決しました。しかし、その後、プロジェクト->プロパティ->ビルドパス->ライブラリの追加-> junit->バージョン(ex junit4)-> applyを選択しました。
依存関係が自動的に追加されました。それは私の問題を解決しました。
EGitを使用していて、たとえばCloverのようなテストカバレッジツールのためにクラスパスが更新された場合、/path/to/git/repository/<project name>/bin/
の内容を完全には削除しないクリーンアップの問題があることを別の回答として言及する価値があります
基本的に、Eclipseのエラーログビューを使用して、このクリーンアップ作業中に問題の原因を特定し、ソースディレクトリに移動し、<project name>/bin
ディレクトリを手動で削除しました。それが終わったら、Eclipseに戻ってプロジェクトを更新(F5
)し、エラーはなくなりました。
ダミーの変更を行い、テストクラスを保存すると、問題を解決できます。 .classを自動的に構築します
1- mvn Eclipse:Eclipse
2-すべてのプロジェクトをクリーンアップするプロジェクト
3-再起動
JunitsをデバッグするEclipse Heliosでも同様の問題がありました。 Junitsを正常に実行できたのと同じJUNITのデバッグ中にClassNotFoundExceptionが発生したため、私の問題は少し異なりました。
Stackoverflow.comや他のフォーラムで利用可能なあらゆる種類のソリューションを試しましたが、何も機能していないようです。これらの問題で2日近く頭を動かした後、最終的にその解決策を見つけました。
いずれのソリューションも機能しない場合は、ワークスペースで作成された.metadataフォルダーを削除するだけです。これにより、プロジェクトとすべての種類の構成をインポートするオーバーヘッドが追加されますが、これらは確実にこれらの問題を解決します。
これらが役立つことを願っています。
これらの手順はうまくいきました。
コンパイルの問題のようです。プロジェクトをMavenテストとして実行してから、JUnitテストとして実行します。
プロジェクトが通常のJavaプロジェクトではなく、Mavenプロジェクトとして開かれているかどうかを確認します。実際には簡単ですが、それはあなたがそれを見逃すかもしれないのとまったく同じ理由です。
「[ERROR]この環境ではコンパイラが提供されていません。おそらく、JDKではなくJREで実行していますか?」が原因である可能性もあります。