1. 概要

このチュートリアルでは、一般的なテストシナリオでJUnit失敗アサーションを使用する方法を探ります。

また、 JUnit4とJUnit5fail()メソッドの違いもわかります。

2. failアサーションの使用

fail アサーションは、AssertionErrorを無条件にスローするテストに失敗します。

単体テストを作成する場合、failを使用して、目的のテスト条件下で明示的に失敗を作成できます。これが役立つ場合をいくつか見てみましょう。

2.1. 不完全なテスト

テストが不完全であるか、まだ実装されていない場合、テストに失敗する可能性があります。

@Test
public void incompleteTest() {
    fail("Not yet implemented");
}

2.2. 予想される例外

例外が発生すると思われる場合にも実行できます。

@Test
public void expectedException() {
    try {
        methodThrowsException();
        fail("Expected exception was not thrown");
    } catch (Exception e) {
        assertNotNull(e);
    }
}

2.3. 予期しない例外

例外がスローされることが予想されないときにテストに失敗することは、別のオプションです。

@Test
public void unexpectedException() {
    try {
        safeMethod();
        // more testing code
    } catch (Exception e) {
        fail("Unexpected exception was thrown");
    }
}

2.4. 試験条件

結果が目的の条件を満たさない場合は、 fail()を呼び出すことができます。

@Test
public void testingCondition() {
    int result = randomInteger();
    if(result > Integer.MAX_VALUE) {
        fail("Result cannot exceed integer max value");
    }
    // more testing code
}

2.5. 前に戻る

最後に、コードが期待どおりに返されない/壊れない場合、テストに失敗する可能性があります。

@Test
public void returnBefore() {
    int value = randomInteger();
    for (int i = 0; i < 5; i++) {
        // returns when (value + i) is an even number
        if ((i + value) % 2 == 0) {
            return;
        }
    }
    fail("Should have returned before");
}

3. JUnit5とJUnit4

JUnit 4のすべてのアサーションは、org.junit.Assertクラスの一部です。 JUnit 5の場合、これらはorg.junit.jupiter.api.Assertions。に移動されました。

JUnit5でfailを呼び出して例外が発生すると、JUnit4で見つかったAssertionErrorではなくAssertionFailedErrorを受け取ります。

fail()および fail(String message)に加えて、JUnit5にはいくつかの便利なオーバーロードが含まれています。

  • 失敗(スロー可能な原因)
  • fail(文字列メッセージ、スロー可能な原因)
  • 失敗(サプライヤー messageSupplier)

さらに、すべての形式の不合格として宣言されていますパブリックスタティック V fail() JUnit5で。 ジェネリックリターンタイプV、を使用すると、これらのメソッドをラムダ式のシングルステートメントとして使用できます。

Stream.of().map(entry -> fail("should not be called"));

4. 結論

この記事では、JUnitでのfailアサーションの実際のユースケースについて説明しました。 JUnit4およびJUnit5で使用可能なすべてのアサーションについては、JUnitアサーションを参照してください。

また、JUnit4とJUnit5の主な違い、およびfailメソッドのいくつかの便利な拡張機能についても説明しました。

いつものように、記事の完全なソースコードは、GitHubから入手できます。