44

src/test/java単体テスト用のデフォルトのフォルダーがあります。src/integration/java統合テスト用に別のフォルダーを使用できます。

maven-surefire-pluginそれぞれのフェーズでユニット/統合テストを実行するようにを構成しました。これは、コンパイルされたクラスが正しいディレクトリにある場合にうまく機能します。残念ながら、Mavenは1つのテストソースフォルダーと1つのテスト出力フォルダーのみをサポートします。

mavens build-helperプラグインを使用すると、別のtest-sourceフォルダーを追加できますが、コンパイルされたクラスはに生成されますが、からクラスをtest-classesコンパイルしたいと思います 。これは可能ですか?src/integration/javatarget/integration-test-classes

src/test/java > target/test-classes
src/integration/java > target/integration-test-classes

PS:パッケージベースのソリューションでこの除外/含めるのは好きではありません(**/it/**デフォルトのテストフェーズからすべてのファイルを除外**/unit/**し、統合フェーズからすべてを除外します。

4

4 に答える 4

47

あなたが書いたものに基づくと、統合テストに正しく名前を付けておらず、統合テストにmaven-failsafe-pluginを使用していなかったようです。maven-failsafe-pluginの規則に基づいて、統合テストにのような名前を付ける必要があります*IT.java。統合テストに適切な名前を付けた場合は、次のような多かれ少なかれ構成でそれを処理できます。

<project ...>
  [...]
  <build>
    [...]
     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.9.1</version>
        <executions>
          <execution>
            <id>add-test-source</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/integration/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      [...]
  </build>
  [...]
</project>

上記を使用すると、同じモジュール内で統合テストを実行することができます。ただし、これでは、コンパイルされた統合テストクラスを別のフォルダーに入れるという考えは解決されません。

統合テストのみを含む別個の統合テストモジュールを使用する方がよい場合があります(その結果、マルチモジュールビルドが作成されます)。Mavenの規則をそのままにしておきたい場合は、target/integration-tests/classes実際には機能しないと思われる別の出力パス(たとえば)を使用するようにmaven-compiler-pluginを構成してみてください。

于 2012-04-13T18:01:15.330 に答える
17

(追加のフォルダーを追加するのではなく)単体テストのソースフォルダーのみを変更する場合は、testSourceDirectory要素を変更するだけです。

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>

これは、すべての単体テストがGroovyで記述されている場合に役立ちます。(ただし、GroovyコードもコンパイルするようにMavenを構成する必要があります。groovy -eclipse-maven-pluginまたはbuild-helper-maven-pluginを参照してください。)

于 2016-12-01T18:00:33.590 に答える
10

申し訳ありませんが、ハッキングを検討している場合でも、それを行う方法はありません。ここでの概念は、コンパイルされたクラス用のターゲットディレクトリとコンパイルされたテストクラス用のターゲットディレクトリが1つしかないことです(単一の<build>タグでもこれを公開します)。正直なところ、Mavenでそれが可能になるはずはないと思います。Mavenは、巧妙に作成されたモジュールを使用して、アプリケーションのまっすぐでクリーンで読みやすいデザインを促進します。

あなたが本当にやりたいのは、実際に統合テストモジュールを作成することだと思います。ちなみに、これは一般的な方法です。これまでのところ、私は常に個別の統合テストモジュールを使用しており、問題が発生したことはありません。これらのテストを実行するために必要なすべてのモジュールに依存する必要があります。<type>test-jar</type>ここで説明するように、依存関係宣言内で使用することにより、他のモジュールのテストクラスに依存することもできます。

http://maven.apache.org/guides/mini/guide-attached-tests.html

ただし、このメソッドは好きではありません。通常、JUnitテストケースの基本クラスなど、テストサポートを備えた個別のモジュールを使用することを好みます。

于 2012-04-13T10:04:08.583 に答える
0

複数のテストソースファイルを作成して、Eclipseでコードを実行することができませんでした。次のような複数のテストソースフォルダが必要になる理由はたくさんあることを理解しています。

  • テストは、テスト対象のコードと同じパッケージに含まれている必要があります
  • 単体テスト、統合テスト、外部リソース、サービス、ライブラリなどのテストなど、重要なアプリケーションに含める必要のある自動テストには複数の種類があります。
  • 多くの場合、クリーンアップが必要な良いテストと悪い/危険なテストが混在する非常に長時間実行されるコードベースを継承します。古いテストまたは新しいテストのいずれかを個別に(個別のテストとすべてを実行する機能の両方として)実行しながら、これらのテストをカリングして新しい自動テストベースを構築する間、これらのテストを維持できれば便利です。各カテゴリのテストの一度に)
  • さまざまなタイプのテストは、テストの実行に必要なリソースに応じて、さまざまな時間に実行する必要があります(たとえば、コードチェックイン、ナイトリービルド、長時間実行テストなど)。命名規則によるこれの管理は、大規模なプロジェクトでは非常に煩雑になります
  • テストは本番コードとは別にする必要があります(つまり、本番リリースの一部としてテストクラスをデプロイする必要はありません)。
  • 多くの場合、テストでは、本番環境にデプロイする必要のあるプロセスの一部ではないプロセスを自動化するために追加のコードが必要でした(たとえば、サービスやデータベースのデータから複雑なデータ構造を構築するなど、リソースを取得するための重要なプロセスを実装するクラス)

これに対する私の解決策は、新しいプロジェクトを作成し、次にここに書かれていることに基づいて、新しいプロジェクトに複数のソースフォルダー(テストソースフォルダーではない)を作成することでした:https ://www.baeldung.com/maven-project-multiple-src -ディレクトリ

これは、上記のすべての要件を満たしています。

どうぞよろしくお願いいたしますが、マイナス面をお知らせください。私が間違っていることを証明してください;)

于 2021-04-14T15:06:15.353 に答える