JUnitテストの実行時にクラスが見つからないという例外


117

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)

JUnitMavenを使用していますが、クラスパスにライブラリを追加しようとしましたが、JUnitライブラリはPOM依存関係にあります。

私はすでにプロジェクトのクリーンアップを試み、EclipseのJUnitプラグインを使用して新しいJUnitテストケースを作成しましたが、それでも同じエラーが発生します。


10
mvn clean testすべてのテストクラスがコンパイルされるようになったら実行してみてください
Jigar Joshi 2012

1
com.myproject.server.MyTestがbinフォルダーにあるかどうかを確認できますか?コンパイルまたはビルドパスエラーのためにコンパイルされない場合、このエラーが発生します。
vikas

1つのクラスまたはプロジェクト全体をテストしていますか?
Doszi89


1
私の場合、Mavenを使用したテストの実行は機能しましたが、テストクラスを右クリックして[実行]-> [JUnitテスト]を選択すると、ClassNotFoundExceptionが報告されました。プロジェクトを右クリックして[プロパティ]-> [ビルダー]に移動し、MavenプロジェクトビルダーをJavaビルダーの上に移動して
修正しました

回答:


120

これは、使用時にソースコードのみがコンパイルされるために発生するようmvn clean compileです(私はmaven 3.1.0を使用しているため、常にこのように動作したかどうかはわかりません)。

を実行するmvn testと、テストコードもコンパイルされますが、テストは実行されます(Eclipseで実行しようとする場合は、すぐには望ましくない場合があります)。これを回避する方法はtest-compile、Mavenコマンドシーケンスにいつでも追加することです。あなたがしmvn cleanます。たとえば、を実行しmvn clean compile test-compileます。


1
私はこれを一度経験し、slomekの答えが機能し、それからこの同じエラーが再び起こったので、私もこれを試さなければなりませんでした。これで問題なく動作するようになりました。安全のために、これらの両方を実行することをお勧めします。
ロジャー、

ありがとう、それは私のために働いた。しかし私の場合、それが終了するまで機能せず、日食でプロジェクトを再開しました。
Paramesh Korrakuti

簡単に言えば、「mvn clean test-compile」を実行してから、JUnitテストをEclipseで実行します。それは私のために働いた。ありがとう。
スレラム2018

103

私は私のテストで同様の問題があったし、あなたが行かなければならないことを、ウェブのどこかを発見したビルド・パス、プロジェクトのプロパティに移動し、Mavenの依存関係を上記のJREシステム・ライブラリー。それは私にはうまくいったようです。


1
おかげで私の問題は解決しました。実際のテストでは、実行しようとしたときにclass not foundエラーが発生していました。これはおそらく、mvnビルドターゲットを追加する前の望ましい最初のステップだと思います。
Roger

8
この方法は、この投稿のスクリーンショットで説明されています(上記の@slomekの回答から手順が明確でない場合)
nhylated '19年

2
Maven管理対象依存関係をEclipse Mars 2のJREシステムライブラリの上に移動することはできませんでしたが、プロジェクトを右クリックして[プロパティ]-> [ビルダー]に移動し、MavenプロジェクトビルダーをJavaビルダーの上に移動することができました。
xorcus

上記のすべてを試しましたが、うまくいきませんでした。JREシステムライブラリに関するMaven依存関係を移動することもできませんでしたが、[ライブラリ]タブにありました。次に、ビルドパス->注文とエクスポート->に移動し、Maven依存関係をJREシステムライブラリの上に移動できるようにしました。次に、プロジェクトをビルドしてMavenインストールを実行したところ、テストは正常に実行されました。
ミーガン

22

私は同じ問題に直面し、@ slomekの回答を使用してそれを修正することができましたが、問題はその後再び浮上しました。

最後に、プロジェクトの出力フォルダーをJUnitテストの実行構成に追加して、問題を修正しました。手順は次のとおりです。

  • からプロジェクトの出力フォルダーを見つける Project properties -> Java Build Path -> Default output folder
    • 通常これは <project-folder>/bin
  • に行く Run -> Run Configurations...
  • 単体テストの実行構成をクリックし、Classpathタブをクリックします
  • プロジェクトの出力フォルダを明示的に追加しますUser Entries-プロジェクトがすでにそこに含まれている場合でも
    • をクリックしAdvanced -> Add folderて出力フォルダを追加します

この問題は、Eclipseでの奇妙なプロジェクトのセットアップが原因である可能性があります。たとえば、ネストされたmavenプロジェクトが単一のプロジェクト/フォルダーとしてインポートされたソースフォルダー(少なくとも私のプロジェクトのセットアップ方法)。


どうもありがとうございます; 私はこの問題を抱えていました。あなたの修正は私にとってうまくいきました。上位2つはしませんでした。賛成票。
davtom 2015

絶対に素晴らしい!これ以上何年も頭を悩ませてきました。ありがとう!
RayCh

17

この問題がEclipseでのみ発生する場合は、選択したプロジェクトでProject-> Clean ...コマンドを実行すると解決する場合があります。


ありがとう-それは実際に私のために働いた-JAVE EE eclipse gradlew
Abdeali Chandanwala


5

maven updateを実行して問題を修正しました。プロジェクトを右クリック>プロジェクト> Maven>プロジェクトの更新


3

私の場合、mavenディレクトリ構造が間違っていました。

これは次のようになります:

/ src / test / java / com.myproject.server.MyTest

それを修正した後-すべてが魅力のように機能しました。


2

私の場合、次のステップだけがこの問題を解決するのに役立ちました:

  1. プロジェクト->プロパティ->実行/デバッグ設定。
  2. 「.....」の設定を起動して、クラス/プロジェクトを選択します
  3. 編集->クラスパス->「デフォルトエントリの復元」

ありがとう!! これだけが助かった!!
スマンダ

1

以前は、この場合、常にmvn eclipse:eclipseを実行してEclipseを再起動しましたが、うまくいきました。GITに移行した後、Girlは動作しなくなりました。

ここでの基本的な問題は、Eclipse氏がコンパイルされたクラスを見つけられないことです。次に、出力フォルダーをProject / target / test-classesに設定します。これは、デフォルトで以下によって生成されます。mvn clean installテストをスキップせずに、次の回避策に進みます。

オプション1:各テストケースのクラスパスを設定する

Eclipse-> Run-> Run Configurations-> under JUnit-> select mytest-> under classpath tab-> Select User Entries-> Advanced-> Add Folder-> Select-> Apply-> Run

オプション2:クラスパス変数を作成し、すべてのテストケースのクラスパスに含める

Eclipse-> Windows-> Classpath Variables-> New-> [Name:Junit_test_cases_cp | path:]-> ok次に、Eclipse-> Run-> Run Configurations-> JUnit-> select mytest-> select classe tab-> Select User Entries-> Add-classpath variables-> Select Junit_test_cases_cp-> ok- >適用->実行

これは、すべての提案をオンラインで試した後、現在私にとって唯一有効なものです。


1

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つのファイルのいずれかの名前を変更しただけで消えました。


1

NoClassDefFoundErrorは、実際にはクラスを初期化できないことを意味します。クラスを見つけることとは何の関係もありません。null文字列でtrim()を呼び出すと、このエラーが発生しました。

JUnitはNullPointerExceptionを表示しません。テストに使用できないプロパティファイルから文字列をフェッチしているため、通常の実行時に文字列はnullではありません。

私のアドバイスは、テストに合格するまでクラスから断片を取り除くことです。次に、どの行がエラーを引き起こしているかを判別できます。


0

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

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

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

これらがお役に立てば幸いです。


注意として...これを行うには、環境を再構築する必要があります。だから、解決策はちょうど...あなたがしようとしている何かを知ることができる一方で
ボブ・

0

これらの手順は私にとってうまくいきました。

  • ローカルMavenリポジトリのコンテンツを削除します。
  • コマンドラインでmvn clean installを実行します。(pomディレクトリに移動します)。
  • Eclipseでプロジェクトをビルドします。

0

1- mvn eclipse:eclipse

2-すべてのプロジェクトをクリーンアップする

3-再起動


0

eGitを使用していて、たとえばCloverのようなテストカバレッジツールが原因でクラスパスが更新された場合、その内容を完全に削除しないクリーンアップ障害が発生する場合があることは、別の回答として言及する価値があります。 /path/to/git/repository/<project name>/bin/

基本的に、私はEclipseのエラーログビューを使用して、このクリーンアップ作業中に問題の原因を特定し、ソースディレクトリに移動して、手動で<project name>/binディレクトリを削除しました。それが完了すると、Eclipseに戻っF5てプロジェクトを更新()し、エラーはなくなりました。


0

プロジェクトが通常のJavaプロジェクトだけでなく、Mavenプロジェクトとして開かれているかどうかを確認します。実際には非常に簡単ですが、それはあなたが見逃すかもしれないのとまったく同じ理由です。


0

「[エラー]この環境ではコンパイラーが提供されていません。おそらく、JDKではなくJREで実行していますか?」


0

私は同じ問題に直面していました。インターネットからダウンロードして外部に追加した外部JUnit jar依存関係を削除することで解決しました。しかし、私はプロジェクト->プロパティ->ビルドパス->ライブラリを追加-> junit->バージョンを選択しました(ex junit4)->適用しました。

依存関係が自動的に追加されました。それは私の問題を解決しました。



0

コンパイルの問題のようです。プロジェクトをMavenテストとして実行し、次にJUnitテストとして実行します。



0

Plsは依存関係としてjunit4を追加したかどうかを確認します。

例えば

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

-5

配置するのを忘れたのかもしれません メインクラステストケースクラスを/ src / test / java。一度確認してください。


1
java.lang.ClassNotFoundExceptionは、クラスがすでにコンパイルされているが、実行時にクラスパスが正しく設定されていないために発生します。
Nitin Mahesh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.