Mavenを使用したテストのスキップ

1. 前書き

多くの場合、テストをスキップすることは悪い考えです。 ただし、役立つ可能性がある状況がいくつかあります。新しいコードを開発していて、テストが合格またはコンパイルされていない中間ビルドを実行したい場合などです。
これらの種類の状況でのみ、テストをスキップしてコンパイルと実行のオーバーヘッドを避けることができます。 もちろん、テストを実行しないと、コーディングの習慣が悪くなる可能性があることを考慮してください。
このクイックチュートリアルでは、Mavenを使用したテストをスキップするための*可能なすべてのコマンドとオプションについて説明します。

2. Mavenライフサイクル

テストをスキップする方法の詳細に入る前に、*テストがコンパイルまたは実行されるタイミングを理解する必要があります*。 link:/maven-goals-phases[Mavenの目標とフェーズ]に関する記事では、Mavenのライフサイクルの概念をより深く掘り下げていますが、この記事の目的のために、それを知っておくことが重要ですMavenは次のことができます。
  1. テストを無視

  2. テストをコンパイルする

  3. テストを実行する

    例では、テストのコンパイルと実行を含む_package_フェーズを使用します。 このチュートリアル全体で検討するオプションは、https://maven.apache.org/surefire/maven-surefire-plugin/ [Maven Surefire Plugin]に属します。

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
パッケージフェーズは成功します。
最後に、廃止予定のフラグ_-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構成を使用して*テストフォルダーを作成し、テストの実行をスキップする方法を調べてみましょう。 そのためには、Maven Surefireプラグインにプロパティを設定する必要があります。
<properties>
    <tests.skip>true</tests.skip>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <skipTests>${tests.skip}</skipTests>
    </configuration>
</plugin>
Mavenプロパティ_tests.skip_は、以前に定義したカスタムプロパティです。 したがって、テストを実行する場合はオーバーライドできます。
mvn -Dtests.skip=false package

4. 結論

このクイックチュートリアルでは、テストのコンパイルや実行をスキップするために、Mavenが提供するすべての選択肢を検討しました。
MavenのコマンドラインオプションとMavenの構成オプションを調べました。