web-dev-qa-db-ja.com

Mavenフェイルセーフがテストを実行しない

StackOverflowや他の多くのサイトを調査し、他の多くの関連する投稿を見つけて、上記のすべての提案に従いましたが、結局、failsafeはテストをスキップしています

私のJUnitテストはここにあります:myModule/src/main/test/Java/ClientAccessIT.Java

このモジュールには単体テストがないので、私はスキップしている確認します

<!-- POM snippet -->
<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
  <skip>true</skip>
  </configuration>
</plugin>

そして、私はfailsafeで統合テストを実行しようとしています:

<!-- POM snippet -->
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <id>run-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

ただし、mvn verifyを実行すると、次のように表示されます。

[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (run-tests) @ rest-services-test ---

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

私は最後の4時間半の精練に費やしました、どんな助けでもありがたいです。言及する価値がある他の唯一のことは、私が Cargo を設定して、Tomcatコンテナを分解することです。誰かが明白な問題を見ていますか?

36
danny-v

テストクラスの名前を変更する必要があります。

@acdcjuniorで指摘されているように、プラグインがデフォルトで検索する名前は ドキュメント にあります。

デフォルトでは、Failsafeプラグインは、次のワイルドカードパターンを持つすべてのテストクラスを自動的に含めます。

  • **/IT*.Java "-すべてのサブディレクトリと、" IT "で始まるすべてのJavaファイル名が含まれます。
  • **/*IT.Java "-そのすべてのサブディレクトリとすべてのJava「IT」で終わるファイル名を含みます).
  • **/*ITCase.Java "-そのすべてのサブディレクトリとすべてのJava「ITCase」で終わるファイル名を含みます).
19
Keppil

同様の問題がありました。 target/test-classesにコンパイルされたテストクラスがない場合は、pomファイルをチェックして、パッケージが「pom」でないことを確認してください。

18
Raymond

テストがデフォルトのテストソースディレクトリsrc/test/Javaにありません。見る:

https://maven.Apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

myModule/src/main/test/Java/ClientAccessIT.Java

でなければなりません:

myModule/src/test/Java/ClientAccessIT.Java

また、pomファイルを更新して(テストをメインで実行したい場合)、以下を含めることもできます。

<build>
    <testSources>
        <testSource>
            <directory>src/main/test</directory>
        </testSource>
    </testSources>
</build>
17
pro-tester

マルチモジュールプロジェクトの場合、子プロジェクトはプラグインを次のように宣言する必要があります。

 <plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
 </plugin>

バージョンは親pomを継承します。上記の定義がないと、親pomのプラグインだけでは機能しません。

12
barryku

私も同様の問題を抱えていましたが、パッケージ要素を「ポン」にする必要がありました。テストソースファイルがコンパイルされ、maven-compiler-pluginを使用して.../target/test-classesフォルダーに追加されていることを確認します。

       <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <executions>
                <execution>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
6
conapart3

私は同じ問題を抱えていて、ここで提案されたオプションのいくつかを試しました。私は、JUnit 5を使用してSpring Bootアプリケーションを開発しています。残念ながら、 プラグインのアドバタイズ に関係なく、統合テスト(src/test/Javaにあり、*TestIT.Javaのサフィックスが付いている)は選択されていません。私は 2.18.1、2.19.1へのダウングレード を試み、<executions>セクションと<configuration>セクションの両方を削除して、プラグインのデフォルト機能さえ使用しようとしましたが、うまくいきませんでした。

ようやくバージョンを最新(執筆時点)から2.22.0に、そしてビオラに変更しました。これが私のpomの<build><plugins>セクションに追加した設定です。さらに良いことに、ほとんどの人が含むintegration-testおよびverify目標を定義する実行を追加する必要はありません。フェイルセーフはデフォルトでこれらを実行します。 Mavenライフサイクルのtestフェーズ中にユニットテストを実行するために使用しているので、確実なプラグイン構成も含めました。

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$-->
</plugin>

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$ -->
</plugin>

そして、良い目安として、surefireとfailsafeを伝えるために JUnit 5を使用するため 、これを<dependencies>セクションに含めます。

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <scope>test</scope>
</dependency>

Eclipseは、バージョンタグの下に警告(黄色の波線)を表示するため、<!--$NO-MVN-MAN-VER$ -->エラーが含まれます。これに対処するためのより良い方法があると確信していますが、この場合はそれでうまくいきます。

この構成のテストを高速化し、testintegration-testまたはverifyフェーズでは、次のコマンドを使用してすばやく検証しました。

  • mvn failsafe:integration-test(統合テストのみを実行)
  • mvn surefire:test(単体テストのみを実行)
  • (それが数えるとき、私は明らかにライフサイクル全体を実行します)

これが誰かを助けることを願っています。乾杯!

5
Danny Bullis

私にとっては、実行セクションがありませんでした

            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>

https://maven.Apache.org/surefire/maven-failsafe-plugin/examples/testng.html にあるTestNGでのフェイルセーフのドキュメントは、それがないとpomを示し、それは機能しませんでした。

<plugins>
    [...]
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin>
    [...]
</plugins>

上記の不足している実行セクションを追加すると、問題が解決しました。

1
Gonen I

私は多少似たような問題を抱えていました。統合テストが行​​われていませんでした。私のプロジェクトはマルチモジュールのスプリングブートプロジェクトです。そして私の間違いは、親POMにmaven-failsafe-pluginを追加したことです。多くのオプションをいじり回した後、フェイルセーフプラグインをモジュールpomに配置し、すべての統合テストが存在して問題を解決しました。

0
horizon7

私のために、 surefire:verifyはテストを実行しませんでした。 surefire:integration-test

0
cliffberg