MavenでJarを構築し、テスト結果を無視する
1. 前書き
このクイックガイドでは、テスト結果を無視してMavenでjarを作成する方法を示します。
デフォルトでは、Mavenはプロジェクトのビルド中にユニットテストを自動的に実行します。 ただし、there are rare cases when the tests can be skipped and we need to build the project regardless of the test results.
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ファイルが作成されません。
つまり、if we have a failing test in our application, we can’t provide an executable file unless we fix the test.
では、この問題をどのように解決できますか?
3. Mavenの引数
Mavenには、この問題に対処するための独自の引数があります。
-
-Dmaven.test.failure.ignore=true テストの実行中に発生した障害を無視します
-
-Dmaven.test.skip=true テストをコンパイルしません
-
-fn、-faeは、テスト結果に関係なくビルドに失敗することはありません
mvn package -Dmaven.test.skip=trueコマンドを実行して、結果を確認しましょう。
[INFO] Tests are skipped.
[INFO] BUILD SUCCESS
これは、テストをコンパイルせずにプロジェクトがビルドされることを意味します。
それでは、mvn package -Dmaven.test.failure.ignore=true コマンドを実行してみましょう。
[INFO] Running testfail.TestFail
[ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError
[INFO] BUILD SUCCESS
アサーションでユニットテストは失敗しますが、ビルドは成功します。
最後に、-fn、-faeオプションをテストしてみましょう。 package -fnコマンドとpackage -faeコマンドはどちらも、jarファイルを作成し、whenMessageAssigned_thenItIsNotNull()テストの失敗に関係なく、BUILD SUCCESS出力を生成します。
マルチモジュールプロジェクトの場合、-fnオプションを使用する必要があります。 -faeは、テストが失敗したモジュールを続行しますが、依存するすべてのモジュールをスキップします。
4. Maven Surefireプラグイン
目標を達成するためのもう1つの便利な方法は、MavenのSurefireプラグインを使用することです。
Surefireプラグインの詳細な概要については、this articleを参照してください。
To ignore test fails we can simply set the testFailureIgnore property to true:
maven-surefire-plugin
${maven.surefire.version}
TestFail.java
true
それでは、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行を次のように置き換えることができます。
true
または、コマンドライン引数-DskipTestsを設定します。 これにより、テストクラスがコンパイルされますが、テストの実行は完全にスキップされます。
5. 結論
In this article, we learned how to build our project with Maven regardless of the test results。 失敗したテストをスキップするか、テストのコンパイルを完全に除外するという実用的な例を試しました。
いつものように、この記事の完全なコードはover on GitHub projectで入手できます。