マルチモジュールプロジェクトがあり、ルートpomで次のようにフェイルセーフが定義されています。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<configuration>
<includes>
<include>**/*IntegrationTest.Java</include>
<include>**/*JourneyTest.Java</include>
<include>**/*CucumberFeatureTest.Java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.Java</exclude>
<exclude>**/*JourneyTest.Java</exclude>
<exclude>**/*CucumberFeatureTest.Java</exclude>
</excludes>
</configuration>
</plugin>
フェイルセーフは、他のpomの他の場所では定義されていません。 mvn verify
を実行すると、統合テストがスキップされます(単体テストが実行されます)。しかし、mvn test-compile failsafe:integration-test
を実行すると、統合テストが実行されます。
私は、フェイルセーフがこれらの両方の状況で実行されることになっていると想定しています。では、mvn verify
と入力すると、なぜ実行されないのですか?
[〜#〜] update [〜#〜]:これがこれらのタグにラップされていることに気づきました:
<build>
<pluginManagement> <!-- oops -->
<plugins>
<plugin>
これが原因を説明しているように感じますが、なぜunitテストがmvn verify
とmvn test
で期待どおりに実行されるのかわかりません。この点で、surefireがフェイルセーフとは異なる動作をするのはなぜですか?
フェイルセーフの統合テストの目標をMavenのintegration-test
フェーズとverify
フェーズにバインドする必要があります。デフォルトでは、フェイルセーフプラグインはVanilla
mavenプロジェクトに含まれていません。追加する必要があります。したがって、integration-test
ライフサイクルがありますが、デフォルトでは含まれていません(少なくとも、maven-failsafe-plugin
は実行されません)。これをintegration-test
フェーズとverify
フェーズに追加します(両方が必要です。[前の統合テストが失敗した場合]、verify
フェーズでのみビルドに失敗します。 post-integration
ライフサイクルフェーズには、リソースを実行およびクリーンアップする機会がまだあるため、「フェイルセーフ」という名前が付けられています。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<configuration>
<includes>
<include>**/*IntegrationTest.Java</include>
<include>**/*JourneyTest.Java</include>
<include>**/*CucumberFeatureTest.Java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
統合テストは実行されず、単体テストのみが実行されたため、mvnverifyを実行したときに同様の問題が発生しました。 skipTestsからfalseをマークした後に機能しました:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
To activate plugin for IntegrationTest,
add declaration maven-surefire-plugin at plugins/plugin:
<plugins>
...
...
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
</build>