SureFireプラグインを使用していくつかの単体テストを実行し、FailSafeプラグインを使用して統合テストを実行するMavenビルドを作成しました。 FailSafeプラグインのテストだけを実行する方法が欲しいです。
マルチモジュールビルドであり、すべてのモジュールのPOMを編集する必要がないため、POMに異なるプロファイルまたは何かを追加するのは良い解決策ではありません。
がある skip.tests
およびmaven.test.skip
およびskipTests
は停止allテスト、および skipITs
は停止のみフェイルセーフプラグイン。
だから、skipITs
のようなMaven用のコマンドラインフラグがありますが、代わりに「onlyITs」の機能がありますか?
Surefireテストのみをスキップする最も簡単な方法は、次のようにsurefire(を設定し、フェイルセーフ)を設定しないことです。
_<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
<!-- skips surefire tests without skipping failsafe tests.
Property value seems to magically default to false -->
<skipTests>${skip.surefire.tests}</skipTests>
</configuration>
</plugin>
_
これにより、_mvn verify -Dskip.surefire.tests
_を実行でき、フェイルセーフではなく確実なテストのみがスキップされます。また、統合前および統合後を含む他のすべての必要なフェーズを実行し、Mavenビルドを実際に失敗させるために必要なverify
ゴールも実行します統合テストが失敗した場合。
これにより、テストをスキップするように指定するプロパティが再定義されるため、正規の_-DskipTests=true
_を指定すると、surefireはそれを無視しますが、フェイルセーフはそれを尊重します。これは、特に既存のビルド/ユーザーがいる場合そのフラグを既に指定しています。簡単な回避策は、pomの_skip.surefire.tests
_セクションで_<properties>
_をskipTests
の値にデフォルト設定することです。
_<properties>
<skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>
_
必要に応じて、フェイルセーフ用に_skip.failsafe.tests
_という名前の類似のパラメーターを提供できますが、ユニットテストは通常前のフェーズで実行されるため、統合ではなくユニットテストを実行する必要があるため、必要ではありません。テストでは、test
フェーズの代わりにverify
フェーズを実行します。あなたの経験は異なる場合があります!
これらのskip.(surefire|failsafe).tests
プロパティは、おそらくsurefire/failsafeコード自体に統合されるべきですが、「それらは1つの小さな違いを除いてまったく同じプラグインです」という精神にどれだけ違反するかわかりません。
回避策は以下を呼び出すことです。
mvn clean test-compile failsafe:integration-test
確かに、これはisいですが、あなたの問題を解決するかもしれません。
または(別のハック):
mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
参照:
Antonio Goncalves Blog のコードを使用していますが、これは完璧に機能します。
次のプロパティを使用できます。
-DskipUTs=true
surefireテストをスキップします。
-DskipITs=true
フェイルセーフテストをスキップします。
-DskipTests=true
すべてのテストをスキップします。
pom.xml
以下のとおりであります:
<properties>
<skipTests>false</skipTests>
<skipITs>${skipTests}</skipITs>
<skipUTs>${skipTests}</skipUTs>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>${skipUTs}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>run-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<skipTests>${skipTests}</skipTests>
<skipITs>${skipITs}</skipITs>
</configuration>
</plugin>
</plugins>
</build>
お役に立てれば!
FailSafeのみでテストを実行してみてください(integration-testのプラグイン-この種類の名前の統合テストのみをデフォルトで実行できます:* / IT。Java、**/IT.Java、*/* ITCase.Java;ですが、pomファイルから簡単に変更できます)
mvn failsafe:integration-test
また、SureFire(単体テスト用のプラグイン)のみを使用する場合
mvn surefire:test
または、一度に1つのテスト:
mvn -Dtest=MyUnitlTest
私はこれが好きなので、すべてのフェーズが通常実行されます:
mvn -Dtest=foo -DfailIfNoTests=false verify