1. 序章

テストをスキップすることはしばしば悪い考えです。 ただし、それが役立つ場合があります。たとえば、新しいコードを開発していて、テストに合格またはコンパイルされていない中間ビルドを実行したい場合です。

このような状況でのみ、テストをスキップして、テストのコンパイルと実行のオーバーヘッドを回避することができます。 もちろん、テストを実行しないと、コーディングが不適切になる可能性があることを考慮してください。

このクイックチュートリアルでは、Mavenを使用してテストをスキップするためのすべての可能なコマンドとオプションについて説明します。

2. Mavenライフサイクル

テストをスキップする方法の詳細に入る前に、テストがいつコンパイルまたは実行されるかを理解する必要があります Mavenの目標とフェーズに関する記事では、Mavenのライフサイクルの概念について詳しく説明しますが、この記事では、Mavenが次のことができることを知っておくことが重要です。

  1. テストを無視する
  2. テストをコンパイルする
  3. テストを実行する

この例では、 package フェーズを使用します。これには、テストのコンパイルと実行が含まれます。 このチュートリアル全体で検討されているオプションは、MavenSurefireプラグインに属しています。

3. コマンドラインフラグの使用

3.1. テストコンパイルをスキップする

まず、コンパイルされないテストの例を見てみましょう。

@Test
public void thisDoesntCompile() {
    baeldung;
}

コマンドラインコマンドを実行すると、次のようになります。

mvn package

エラーが発生します:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement
[INFO] 1 error

したがって、テストのソースのコンパイルフェーズをスキップする方法を調べてみましょう。 Mavenでは、maven.test.skipフラグを使用できます。

mvn -Dmaven.test.skip package

その結果、テストソースはコンパイルされないため、実行されません。

3.2. テスト実行をスキップする

2番目のオプションとして、テストフォルダーをコンパイルし、実行プロセスをスキップする方法を見てみましょう。 これは、メソッドまたはクラスのシグネチャを変更していないが、ビジネスロジックを変更した結果、テストを中断した場合に役立ちます。 以下のような不自然なテストケースを考えてみましょう。これは常に失敗します。

@Test
public void thisTestFails() {
    fail("This is a failed test case");
}

ステートメントfail()を含めたため、 package フェーズを実行すると、ビルドは次のエラーで失敗します。

[ERROR] Failures:
[ERROR]   PowServiceTest.thisTestFails:16 This is a failed test case
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

テストの実行をスキップしたいが、それでもテストをコンパイルしたいとします。この場合、-DskipTestsフラグを使用できます。

mvn -DskipTests package

パッケージフェーズは成功します。 また、Mavenには、mavenフェイルセーフプラグインと呼ばれる統合テストを実行するための専用プラグインがあります。 -DskipTests は、単体テスト(surefire)と統合テスト(failsafe)の両方の実行をスキップします。 統合テストをスキップするために、-DskipITsシステムプロパティに合格することができます。

最後に、非推奨になったフラグ -Dmaven.test.skip.exec もテストクラスをコンパイルしますが、実行しません。

4. Maven構成の使用

テストのコンパイルや長時間の実行を除外する必要がある場合は、 pom.xml ファイルを変更して、適切な構成を含めることができます。

4.1. テストコンパイルをスキップする

前のセクションで行ったように、テストフォルダのコンパイルを回避する方法を調べてみましょう。 この場合、pom.xmlファイルを使用します。 次のプロパティを追加しましょう。

<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

コマンドラインに反対のフラグを追加することでその値を上書きできることに注意してください

mvn -Dmaven.test.skip=false package

4.2. テスト実行をスキップする

繰り返しになりますが、2番目のステップとして、テストフォルダーを構築し、Maven構成を使用してテスト実行をスキップする方法を調べてみましょう。 これを行うには、MavenSurefireプラグインを次のプロパティで構成する必要があります。

<properties>
    <tests.skip>true</tests.skip>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <skipTests>${tests.skip}</skipTests>
    </configuration>
</plugin>

Mavenプロパティtests.skipは、以前に定義したカスタムプロパティです。 したがって、テストを実行する場合は、これをオーバーライドできます。

mvn -Dtests.skip=false package

4. 結論

このクイックチュートリアルでは、テストのコンパイルや実行をスキップするためにMavenが提供するすべての選択肢について説明しました。

MavenコマンドラインオプションとMaven構成オプションを確認しました。