JUnit ErrorCollector @Rule と例
通常のシナリオでは、テストの実行中にエラーを特定するたびに、テストを停止し、エラーを修正してテストを再実行します。
だけど JUnit は少し異なるアプローチをとります。と JUnit エラー コレクターを使用すると、問題が見つかった後、またはテストが失敗した後でも、テストの実行を続行できます。エラー コレクターはすべてのエラー オブジェクトを収集し、テストの実行終了後に 1 回だけレポートします。
エラー コレクターを使用する理由
テスト スクリプトの作成中は、ネットワーク障害、アサーション障害、またはその他の理由でコード行が失敗した場合でも、すべてのテストを実行する必要があります。そのような状況でも、によって提供される特別な機能を使用してテスト スクリプトの実行を続行できます。 JUnit 「エラーコレクター」として知られています。
このため、 JUnit 使用されます @Rule アノテーション エラーコレクターのオブジェクトを作成するために使用されます。 エラーコレクターのオブジェクトが作成されたら、メソッドを使用してすべてのエラーをオブジェクトに簡単に追加できます。 addError (スロー可能なエラー)。 ご存知のとおり、それは スロー可能 のスーパークラスです 例外 および エラー クラスイン Javaこの方法でエラーを追加すると、これらのエラーは記録されます JUnit テスト結果 。
すべてのエラーをエラー コレクターに追加する利点は、すべてのエラーを一度に確認できることです。 また、スクリプトが途中で失敗しても、引き続き実行できます。
注意: 単純なassertまたはtry/catchブロックを使用する場合、エラーコレクターメソッドを使用することはできません。
サンプルコード
Error Collector の詳細を理解するには、Error Collector オブジェクトを作成し、そのオブジェクトにすべてのエラーを追加して問題を追跡する方法を示す以下のコード例を参照してください。
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. } }
jUnit の @Rule とは何ですか?
JUnit 特殊な種類のテスト処理を提供します。 テストケース またはテストスイートを使用して @rule アノテーション。 @rule を使用すると、テストの動作を簡単に追加または再定義できます。
によって提供されるいくつかの組み込みルールがあります。 JUnit テスターが使用できる API、または独自のルールを作成することもできます。
@rule アノテーションを Error Collector とともに使用する方法を示す以下のコード行を参照してください。
@Rule public ErrorCollector collector= new ErrorCollector();
ErrorCollector を使用した例
エラー コレクターを理解するために、すべてのエラーを収集するクラスとルールを作成しましょう。 ここで addError(throwable) を使用してすべてのエラーを追加します。
「Error Collector オブジェクト」を作成するだけのルールを作成する以下のコードを参照してください。 これは、最後に問題を報告するためにすべてのエラーを追加するためにさらに使用されます。
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()); } }
出力:
すべてのエラーを XNUMX か所で追跡する障害トレースを参照してください。
のメリット JUnit エラーコレクター
あなたが使用することができます JUnit 機能検証または GUI 検証のためのアサーション。例:
- assertEquals(String message, Object Expected, Objectactual) は、XNUMX つのオブジェクトが等しいかどうかを比較します。
- 同様に、assertTrue(Booleancondition) は、条件が true であることをアサートします。
アサーションを利用することで検証テストが容易になります。 ただし、大きな問題の XNUMX つは、XNUMX つのアサーションが失敗した場合でもテストの実行が停止してしまうことです。
テストの自動化を成功させるには、テストの継続性と回復処理が重要です。 Error Collector は、このような種類のシナリオを処理する最適な方法です。
まとめ
- JUnitエラーコレクターを使用すると、最初の問題が見つかり、最後にテストが失敗した後でもテストを続行できます。
- エラー コレクターはすべてのエラー オブジェクトを収集し、テストの実行が終了した後にのみレポートします。
- エラー コレクターにすべてのエラーを追加する利点は、すべてのエラーを一度に確認できることです。
- エラー コレクターは、ErrorCollector.java によって提供されるメソッド addError(throwable err) を使用してエラーを追加するだけです。