web-dev-qa-db-ja.com

EclipseのJUNITテストクラス-Java.lang.ClassNotFoundException

(プロパティファイルが正しく読み込まれることを確認するために)junitテストを実行しようとしていますが、ClassNotFoundExceptionが表示されますが、クラスがあり、必要なライブラリもすべてあります。

ここに私が得るエラーがあります:

Class not found ConfigurationManagerTest                                                 Java.lang.ClassNotFoundException: ConfigurationManagerTest
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:200)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:188)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:268)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:251)
    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)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)

これを修正する方法についてのアイデアはありますか?

ありがとう。

54
Mouna Cheikhna

ConfigurationManagerTestがクラスパスで見つかりません。 ConfigurationManagerTest.classファイルがクラスパスで利用可能であることを確認してください。

正常にコンパイルされなかった場合、またはEclipseプロジェクトがクラスパス上にあることを指定していないディレクトリに作成されている場合は、存在しない可能性があります。

テストクラスを別のフォルダーに配置したと仮定して、(ナビゲータービューではなく)[パッケージエクスプローラー]ビューに表示されることを確認します。

プロジェクトプロパティの[Java Build Path]および[Source]タブでは、ソースフォルダーがビルドに含まれているかどうか、および.classファイルが生成されている場所も確認できます。

38
Alan Escreet

もう1つの可能性があります。私は今も同じ問題を抱えていましたが、ここで解決できるものはありませんでした。プロジェクトの削除と再作成を除いて-私はそれを試したくありませんでした。助けになったのは、cleanプロジェクトtwo timesすぐに次々にしたことです!クリーン+ビルドは何回でも繰り返すことができます-それは助けにはなりません。 clean + cleanのみで、その後ビルドはOKです。 (Eclipse 3.6)。もちろん、そのために自動ビルドを無効にする必要があります。

編集:この投稿は、2017年11月15日に最後のプラスになりました。したがって、問題(および解決策)は実際のままです。

22
Gangnus

もう1つの考えられる問題は、ビルダーの欠落です(.classファイルがビルドされないようにします)。

.projectファイルに次の行があることを確認します

<buildSpec>
  <buildCommand>
    <name>org.Eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
  </buildCommand>
</buildSpec>
<natures>
  <nature>org.Eclipse.jdt.core.javanature</nature>
</natures>
4
Guy

これは、テストクラスを別のパッケージにドラッグアンドドロップしたときに起こりました。私は次のことをしました

  1. テキストエディターでクラスを保存しました。
  2. 問題のクラスをEclipseプロジェクトエクスプローラーから削除しました。
  3. クラスを再作成しました。

ビンゴ!これでテストを実行できます!

3
Robert

プロパティ-> Javaビルドパス->ライブラリを確認します。エラーがないはずです。私の場合、Mavenにエラーがありました。必要なjarをMavenリポジトリに入れると、うまくいきました

2
vamsi-vegi

ここで説明したすべての答えを試しましたが、どれも機能しませんでしたが、これを見つけました thread slomekは非常に簡単な方法で問題を解決します。プロジェクト->プロパティ-> Javaビルドパスに移動するだけです。次に、Junitを右下に押して、上に移動します。その後、すべてが正常にコンパイルされます。

2
Simon Bengtsson

私はこの問題を抱えていましたが、何が間違っているのかを理解するのはややトリッキーでした。プロジェクトにエラーが発生した依存関係プロジェクトがあり、ビルドの実行が停止しました。この依存関係の問題を取り除くと、プロジェクトは期待どおりにビルドされました。

追伸:DelphiからJavaに変換されたアプリケーションを移植しているので、コンパイルエラーが多いプロジェクトに取り組んでいます。そのため、最初はコンパイルエラーを気にしませんでした。問題を見つけるために。

2
Daniel Pereira

ここや他の投稿で言及されているすべてを試しました。人々が提供したソリューションの一部は次のとおりです。

  1. テストの出力フォルダーを変更する
  2. Mavenからテストコンパイルを実行するプロジェクトのカスタムビルダーを作成する
  3. プロジェクトビルドパスの[順序とエクスポート]リストでMavenの依存関係を高く移動します

たくさんありましたが、私が見つけたものは次のとおりです。開発環境を閉じます。ローカルMavenリポジトリからプロジェクトで使用されているjarを削除します。 IDEを開きます。プロジェクトをビルドします。テストを実行します。

キーボードに対して頭をheadりつけ、提案された解決策に従った後、これはうまくいきました!

1
gffny

私のために働いたのは、テストの実行構成を削除することです。次に、testclassを右クリックし、「junitテストとして実行」をクリックします。

今、それは私のために正しい実行構成を再作成します。

1
Marten Sytema

これが展開できる別の方法は、Eclipseが通知しないビルドエラーがある場合です。単体テストのコンパイルに失敗した場合、.classファイルは存在せず、ClassNotFoundExceptionが発生します。

私の場合、サードパーティのjarファイルがありませんでした。テストを実行すると、「必要なプロジェクトにエラーが存在します」というポップアップウィンドウが表示されました。私は巨大なプロジェクトで働いており、私はalwaysそのメッセージを受け取ります。ソースの一部がEclipseで利用できないためです(長い話)。また、エラーが何であるかについても述べていません。そのため、[続行]をクリックすると、例外が発生します。

何が起こっているのか気づいたら、実行->構成のデバッグ...で不足しているjarをクラスパスに追加することで簡単に修正できます...

何かがうまくいかない場合にこの可能性を認識し、何が間違っている可能性があるかについて最新の変更を確認することを除いて、これを最善に検出または防止する方法がわかりません。

1
user823981

上記のソリューションレビューとしてこの回答を追加します。

  1. メインプロジェクトフォルダーの.projectファイルを編集するだけです。適切なXMLエディターを使用します。そうしないと、Eclipseからこのプロジェクトを開くことができないことを示すfatal errorを取得します。
  2. この<nature>org.Eclipse.jdt.core.javanature</nature><natures></natures>に追加して、プロジェクトの性質をJavaにしました。
  3. 次に、<buildCommand><name>org.Eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand>に正しくインデントされたこれらの行を<buildSpec></buildSpec>に追加しました。
  4. Run as JUnit ... 成功
0
user813853

このエラーは、最近新しいワークスペースを作成し、「インストールされたJRE」が正しくセットアップされなかったために表示されました。 Preferences -> Java -> Installed JREsで、JDKのルートフォルダーが選択されていることを確認します。新しいワークスペースでの私のデフォルトは、何らかの理由でJREでした。

0
HoppyKamper

私も同じ例外に直面しましたが、インターネット上の解決策のどれも私を助けませんでした。私のプロジェクトには複数のモジュールが含まれています。私のJunitコードはWebモジュールにあります。そして、それはクライアントモジュールのコードを指します。

最後に、私は試してみました:(Webモジュール)プロジェクトを右クリック->ビルドパス->ソースタブ->リンクソース-> srcファイルの場所を追加(クライアントモジュール)

それでおしまい!それは魅力のように働いた

0
Sneha Latha

エクスプローラーでプロジェクトを右クリックします。ビルドパス->注文とエクスポート-> JREシステムライブラリ[jdk]を選択し、下ボタンをクリックします。

0
javaPlease42

私はこれがかなり前にすでに回答されていることを知っていますが、答えは私のためにそれを修正しませんでしたが、私はビルドパス設定のソースからすべてを削除し、それらを再追加しました

0
Jakob Hartman
  • 合理的なすべて(ターゲットの削除、更新、クリーニング、再構築、Mavenのインストールなど)を試してみて、Eclipseが適切に動作しないことに気づいたと仮定します...
  • Now:テストと関係のあるプラグイン(任意のプラグイン)である可能性を示唆するエラーがないか確認します。

  • 私の場合:

    • EclEmmaを削除しました
    • 動作し始めました...

推測に数時間を費やしました!.

0
Witold Kaczurba

テストクラスがビルドフォルダーにあることを確認しますか?別のJVMでjunitを呼び出しているため(fork = true)、その呼び出し中に作業フォルダーが変更され、ビルドが相対的な場合、問題が発生する可能性があります。

-verboseまたは-debugスイッチを使用して(Eclipseからではなく)コマンドラインからantを実行して、詳細なクラスパス/作業ディレクトリjunitが呼び出されていることを確認し、この問題を解決できない場合はここに結果を投稿します。

0
Jam

[パッケージエクスプローラー]ビューで、テストクラスを右クリックし、[ビルドパス] >> [含める]の順にクリックします。

0
user4714842

私はこの問題を抱えていました。私の場合、問題はコンパイルに依存しており、mavenを使用していますが、テストクラスはコンパイルされませんでした。

Mavenインストール(すべてのファイルをコンパイルする)を行うことで修正しました。また、「実行構成」が時間を節約するためにテストをスキップするようなコンパイルのテストを回避する他の理由を確認できます。

0
David Marciel

上記のガイの回答のバリエーションで、追加のビルダーが含まれます。 Antビルダーが構成されているとします:

<buildSpec>
    <buildCommand>
        <name>org.Eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.Eclipse.ui.externaltools.ExternalToolBuilder</name>
        <arguments>
            <dictionary>
                <key>LaunchConfigHandle</key>
                <value>&lt;project&gt;/.externalToolBuilders/myprojectantlaunch.launch</value>
            </dictionary>
        </arguments>
    </buildCommand>
</buildSpec>

AntビルドとEclipseビルドの出力場所が異なる場合、Eclipseはクラスパスでテストクラスを見つけることができない場合があります。 Antビルダーの場合、ユニットテストをビルドするターゲットが呼び出されることを確認するために、クリーン、自動、手動、およびクリーン後のビルドの構成済みターゲットも確認​​します。

0
javabrett

Java Build Pathタブの出力フォルダーが以下のように設定されていることを確認してください。これにより、.classファイルが生成される場所が決まります。その後、プロジェクトをクリーンアップします。

enter image description here

0
K. Andy wang

Mavenプロジェクトがある場合は、実行してみてください。

mvn clean compile

その後、Eclipseでプロジェクトをクリーン&ビルドします。

0

JunitsをデバッグするEclipse Heliosでも同様の問題がありました。私はJunitsを正常に実行できたため、同じJUNITをデバッグしているときにClassNotFoundExceptionが発生したため、私の問題は少し異なりました。

Stackoverflow.comや他のフォーラムで利用可能なあらゆる種類のソリューションを試しましたが、何も機能していないようです。これらの問題で2日近く頭を動かした後、最終的にその解決策を見つけました。

どのソリューションも機能していないようであれば、ワークスペースに作成された.metadataフォルダーを削除するだけです。これにより、プロジェクトのインポートおよび実行したあらゆる種類の構成の追加オーバーヘッドが発生しますが、これらは確実にこれらの問題を解決します。

これらが役立つことを願っています。

0
Nayan

さらに別のバリエーション。
どういうわけか、以前働いていたテストクラスが他の場所から実行されているように見えました。テストを実行したときに編集内容が実行されませんでした。

$ {project_loc} src/test/Javaファイルの出力フォルダーが期待したものではないことがわかりました。誤って$ {project_loc} target/classesに設定されていました。プロジェクトプロパティJava Build Path、Sourceタブで適切に設定しました。

0
J Slick