MavenでJarを作り、テスト結果を無視する
1前書き
このクイックガイドでは、テスト結果を無視しながらMavenを使ってjarファイルを作成する方法を説明します。
デフォルトでは、Mavenはプロジェクトの構築中に単体テストを自動的に実行します。ただし、テストがスキップされ、テスト結果に関係なくプロジェクトをビルドする必要がある場合がまれにあります。
2プロジェクトの構築
簡単なプロジェクトを作成して、小さなテストケースも含めます。
public class TestFail {
@Test
public void whenMessageAssigned__thenItIsNotNull() {
String message = "hello there";
assertNotNull(message);
}
}
次のMavenコマンドを実行してjarファイルを作成しましょう。
mvn package
-
これにより、ソースがコンパイルされ、/targetディレクトリに
maven-0.0.1-SNAPSHOT.jar
ファイルが生成されます。
それでは、テストを少し変更しましょう。テストは失敗し始めます。
@Test
public void whenMessageAssigned__thenItIsNotNull() {
String message = null;
assertNotNull(message);
}
今回、再度
mvn package
コマンドを実行しようとすると、ビルドが失敗し、maven-0.0.1-SNAPSHOT.jarファイルが作成されません。
つまり、** アプリケーションでテストに失敗した場合、テストを修正しない限り実行可能ファイルを提供することはできません。
では、どうすればこの問題を解決できるでしょうか。
3 Mavenの引数
Mavenには、この問題に対処するための独自の議論があります。
-
– Dmaven.test.failure.ignore = true
** は発生した失敗を無視します
テスト実行中
_
– Dmaven.test.skip = true
_
はテストをコンパイルしません
**
-
– fn
、
-fae
はテスト結果にかかわらずビルドに失敗することはありません
mvnパッケージの-Dmaven.test.skip = true
コマンドを実行して結果を確認しましょう。
----[INFO]Tests are skipped.[INFO]BUILD SUCCESS
----
これは、テストをコンパイルせずにプロジェクトが構築されることを意味します。
それでは、
__ mvnパッケージ-Dmaven.test.failure.ignore = true
__commandを実行しましょう。
----[INFO]Running testfail.TestFail[ERROR]whenMessageAssigned__thenItIsNotNull java.lang.AssertionError[INFO]BUILD SUCCESS
----
私たちのユニットテストはアサーションに失敗しますが、ビルドは成功します。
最後に、
-fn
、
-fae
オプションをテストしましょう。
package -fn
と
package -fae
の両方のコマンドは、
whenMessageAssigned
thenItIsNotNull()
テストが失敗しても
jar
ファイルを作成し、
BUILD SUCCESS__出力を生成します。
-
マルチモジュールプロジェクトの場合は
-fn
オプションを使用する必要があります。
-fae
は失敗したテストを持つモジュールを続けますが、すべての従属モジュールをスキップします。 **
4 Maven Surefireプラグイン
私たちの目標を達成するためのもう一つの便利な方法はMavenのSurefireプラグインを使うことです。
Surefireプラグインの詳細な概要については、https://www.baeldung.com/maven-surefire-plugin[この記事]を参照してください。
-
失敗したテストを無視するには、
testFailureIgnore
プロパティを
true
** に設定するだけです。
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<includes>
<include>TestFail.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
それでは、
package
コマンドの出力を見てみましょう。
----[INFO] T E S T S[INFO]Running testfail.TestFail[ERROR]Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail
----
実行中のテストの出力から、
TestFail
クラスが失敗していることがわかります。しかしさらに調べると、BUILD SUCCESSメッセージもそこにあり、maven-0.0.1-SNAPSHOT.jarファイルがコンパイルされていることがわかります。
必要に応じて、テストの実行をスキップすることもできます。そのためには、
testFailureIgnore
行を次のように置き換えます。
<skipTests>true</skipTests>
またはコマンドライン引数
-DskipTests
を設定します。これはテストクラスをコンパイルしますが、テストの実行を完全にスキップします。
5結論
-
この記事では、テスト結果に関係なく、Mavenを使ってプロジェクトを構築する方法を学びました** 。失敗したテストをスキップしたり、テストのコンパイルを完全に除外したりする実際的な例を説明しました。
いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/maven[GitHubプロジェクトについて]で利用可能です。