JUnit ErrorCollector @Rule と例
⚡ スマートサマリー
JUnit ErrorCollector は、テストが失敗した後も実行を継続し、すべてのエラー オブジェクトを収集して、テスト メソッドが終了した後にまとめて報告するルールです。ping 最初の問題で。
通常のシナリオでは、テストの実行中にエラーを特定するたびに、テストを停止し、エラーを修正してテストを再実行します。
だけど JUnit 少し異なるアプローチを採用しています。 JUnit エラーコレクターを使用すれば、問題が見つかった場合やテストが失敗した場合でも、テストの実行を続行できます。エラーコレクターはすべてのエラーオブジェクトを収集し、テスト実行終了後に一度だけ報告します。
エラー コレクターを使用する理由
テストスクリプトを作成する際、ネットワーク障害、アサーション失敗、その他の理由でコード行が失敗した場合でも、すべてのテストを実行したい場合があります。そのような状況でも、特別な機能を使用してテストスクリプトの実行を継続できます。 JUnit 「エラーコレクター」として知られています。
このため、 JUnit 使用 @Rule アノテーションこれは、エラーコレクターのオブジェクトを作成するために使用されます。エラーコレクターのオブジェクトが作成されたら、メソッドを使用してすべてのエラーを簡単にオブジェクトに追加できます。 addError (スロー可能なエラー)。 あなたが知っているように、 スロー可能 はスーパークラスです 例外 (NAIST) と エラー のクラス Javaこのようにエラーを追加すると、これらのエラーはログに記録されます。 JUnit テスト結果。
エラーコレクターにすべてのエラーを追加する利点は、すべてのエラーを一度に検証できることです。また、スクリプトが途中で失敗した場合でも、テストメソッドの最後まで実行が継続されます。
お願い: 単純な assert または try/catch ブロックを使用する場合、エラーコレクターメソッドを使用することはできません。
サンプルコード
エラーコレクターについてさらに理解するには、以下のコード例を参照してください。この例では、エラーコレクターオブジェクトを作成し、すべてのエラーをそのオブジェクトに追加する方法を示しています。 track 問題:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
注意: これは例示ですtract はコンパイル可能なファイルではありません。末尾のコメントが先頭の // なしで 2 行目に折り返され、getResults() と Hamcrest マッチャーは表示されません。完全な実行可能なバージョンは以下にあります。 ErrorCollector を使用した例.
@Rule とは何ですか JUnit?
JUnit テストの特別な処理方法を提供し、 テストケース またはテストスイートを使用して @Rule アノテーション@Rule を使用すると、テストの動作を簡単に追加または再定義できます。
にはいくつかの組み込みルールがあります JUnit テスターが使用できるAPIであり、独自のルールを作成することもできます。ルールフィールドは、公開され、静的ではなく、TestRuleを実装する型である必要があります。
以下のコード行は、@Rule アノテーションをエラーコレクターと組み合わせて使用する方法を示しています。
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit 5年の注記: Jupiter はルールを拡張 API に置き換えたため、org.junit.jupiter には @Rule と ErrorCollector は存在しません。最も近い同等のものは Assertions.assertAll() と AssertJ SoftAssertions です。 JUnit ここに示されている 4 つのコードは、ビンテージ エンジンでもまだ動作します。 JUnit アノテーション フルマップのチュートリアルping.
ErrorCollector を使用した例
エラーコレクターを理解するために、すべてのエラーを収集するクラスとルールを作成しましょう。ここでは、addError(throwable) を使用してすべてのエラーを追加します。
以下のコードをご覧ください。これは単に「エラーコレクターオブジェクト」を作成するだけのルールです。さらに、このオブジェクトはすべてのエラーを追加し、最後に問題を報告するために使用されます。
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
テストランナー.java
上記のテストクラスをテストランナーに追加し、実行してすべてのエラーを収集してみましょう。以下のコードを参照してください。
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
出力:
失敗を見る trace、 tracすべてのエラーを1か所にまとめます。 JUnit ビューは実行回数を1回とカウントしますが、2つのエラーと1つの失敗を報告し、それぞれに独自の行番号が付いています。
のメリット JUnit エラーコレクター
あなたが使用することができます JUnit アサーション 機能検証やGUI検証の場合、例えば以下のようになります。
- assertEquals(String message, Object expected, Object actual) は、2 つのオブジェクトが等しいかどうかを比較します。
- 同様に、assertTrue(Booleancondition) は、条件が true であることをアサートします。
アサーションを使うと、検証テストは容易になります。しかし、大きな問題点の一つは、たった一つのアサーションが失敗しただけでもテストの実行が停止してしまうことです。
テストの継続性と復旧処理はテスト自動化の成功に不可欠であり、長期にわたって最も重要となる。 Selenium チェックが失敗するたびにブラウザを再起動するのはコストがかかるようなフローでは、エラーコレクターが最適な対処法です。

