私はMavenとEclipse(m2Eclipseプラグイン)を使用してプロジェクトに取り組んでいます。 JUnitテストに問題があります。
時々、Eclipse内でそれらを実行すると、コンパイルされないことがありますが、代わりに古いクラスファイルが使用されます。クラスファイルを削除すると、EclipseでClassNotFoundExceptions
が取得されます。その後、mvn test-compile
またはその他の目標を使用して、手動で再コンパイルする必要があります。
また、テストのクラスファイルがtest-classes
の代わりにclasses
サブディレクトリに置かれることもあります。
私は本当に何が間違っているのかわかりません。
JUnit Javaファイルはsrc/main/Java
内にあり、正しく名前が付けられています(*Test.Java
)。
常にMaven経由でコンパイルして実行する必要がありますか?実行したいときにEclipseがファイルをコンパイルしないのはなぜですか? (興味深いことに、時々あります。すべてが完全に機能することもあります。)
STS Eclipse(Spring開発版)、m2e、JUnitでも同じ問題がありました。解決策は、src/test/Java
の出力フォルダーをtarget/test-classes
に設定することでした。
src/test/Java
フォルダーを右クリックしますtarget/test-classes
と入力して、[〜#〜] ok [〜#〜]をクリックしますこれで、テストクラスの変更が正しくコンパイルされ、EclipseでJUnitテストを実行できるようになります。
問題は、Eclipseが単体テストをデフォルトの出力フォルダーtarget/classes
にコンパイルする一方で、JUnitプラグインがtest-classes
から単体テストを正しく実行しようとすることです。
この質問にはいくつかの重複があります。
以下の回答に加えて
- Src/test/Javaフォルダーを右クリックします
- [ビルドパス]-> [出力フォルダーの構成]を選択します。
- ターゲット/テストクラスを入力し、[OK]をクリックします
プロジェクトを右クリックしてProperties-> Builderに進み、Builderが正しくセットアップされていることを確認する必要があります。ビルダーが見つからない場合は、ビルダーをインストールする必要があります。私の場合、mavenプロジェクトにはAspectJ依存関係があり、Maven Eclipseプラグインを使用してEclipseプロジェクトをビルドすると、デフォルトでAspectJビルダーを探していました。 AspectJ開発ツールをインストールし、問題を解決しました。
お役に立てれば!
もう1つのポイント:JUnitテストクラスはsrc/main/Javaではなくsrc/test/Javaにある必要があります。そうでない場合、テストクラスとしてMavenによって正しく検出されず、テストjarではなくパッケージjarに含まれます。 。
直面している問題の最も可能性の高い説明は、src/test/Java
が正しく構成されていません。
この設定を手動で修正する の代わりに、m2Eclipseにこれを修正させることができます:プロジェクトを右クリックしてMaven> Update Project。
同じ問題に直面しました。出力フォルダーとMaven> Update Projectの構成に関する上記の提案を試みましたが、どちらも機能しませんでした。最終的にtestOutputDirectoryも「build/classes」に変更され、ユニットテストが取得されて実行されるようになりました。
最後に問題の理由を見つけました。私のPOMでは、以下のようにMavenコンパイラプラグインも設定しました
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<outputDirectory>build/classes</outputDirectory>
</configuration>
</plugin>
outputDirectory構成は不要であり、上記の問題の原因でした。このタグを削除すると、junitはbuild> testclassesフォルダーにコンパイルされ、mavenビルド中にも実行されます。 Yippee :)
プロジェクトアイコンに感嘆符があることを確認してください!私の場合、次のような感嘆符があることを無視しました。 プロジェクトアイコンの感嘆符
「マーカー」パースペクティブを開き、ヒントに従って問題をトラブルシューティングします。 「マーカー」パースペクティブが示すもの
Junitテストクラスは、「マーカー」パースペクティブで警告される読み取り不能なjarを参照していないため、「mvn clean test」を呼び出した後に正常に実行できます。したがって、それを無視するのは簡単です。
Java-scala mixプロジェクトで作業している人にとって、これは注意すべきことです。以下に示す方法で構成を行った後でも、
<build>
<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
<plugins>
...
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.3.2</version>
<configuration>
<testSourceDir>${basedir}/src/test/scala</testSourceDir>
<testOutputDir>${basedir}/target/test-classes</testOutputDir>
</configuration>
</plugin>
</plugins>
</build>
Maven> Update Projectを実行すると、Eclipseはプロジェクト内のsrc/test/Javaフォルダーの出力ディレクトリを優先しますが、src/test/scalaフォルダー。 (特定のソースフォルダーを右クリックし、を選択することでこれを把握できます)(ビルドパス>出力フォルダーの構成...前者の場合はpomで指定されますが、後者の場合は指定されません。
これは、scalaとm2eを使用した場合の既知のバグです。ここで説明したとおりです。 http://scala-ide.org/docs/tutorials/m2Eclipse/
警告
2013年3月の時点で、バグによりsrc/main/scalaとsrc/test/scalaの両方がデフォルトの出力フォルダー(target/classes)を使用します。クラスファイルはコマンドラインでビルドするときのようにターゲット/テストクラスで終わらないので、これはテストをビルドするときに混乱を招くかもしれません。この問題を回避するには、src/test/scalaの出力フォルダーを手動で変更します。
Pom.xmlで設定できる「testSourceDirectory」パスを確認してください。次に、フォルダー(「testSourceDirectory」パスで構成されている)をEclipseビルドパスに追加します。
以下のpom.xmlでサンプル「testSourceDirectory」を見つけてください。
<build>
<testSourceDirectory>src/test/Java</testSourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Eclipseは、クラスファイルをいじることを期待していません。 Eclipseでファイルを編集していない場合、ファイルは変更されておらず、コンパイルする必要がないと想定しています。この問題は、EclipseとMavenが出力ディレクトリを共有していることに起因すると思います。私のmvnビルドが失敗した場合、これをよく目にします。クリーンではあるがコンパイルされていない新しいファイルの一部としてクラスファイルを削除します。最善の解決策は、mvnとEclipseの別々のビルドディレクトリを持つことだと思いますが、私はこれを調べたことはありません。
私の問題はJUnitプラグインではなく、pom.xmlの設定でした。
この質問に対するすべての答えを確認した後、@ Gulatsの答えは、maven-compiler-pluginセクションにtestOutputDirectory
を設定する必要があることを暗示しており、それがトリックを行いました。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<testOutputDir>${basedir}/target/test-classes</testOutputDir>
</configuration>
</plugin>