Java >> Java チュートリアル >  >> Tag >> assert

JUnit 4 および 5 で例外がスローされたことをアサートする

1.はじめに

この簡単なチュートリアルでは、JUnit ライブラリを使用して例外がスローされたかどうかをテストする方法を見ていきます。

もちろん、JUnit 4 と JUnit 5 の両方のバージョンをカバーするようにします。

さらに読む:

AssertJ 例外アサーション

例外に対してアサーションを実行するために AssertJ を使用する方法を学びます。 続きを読む →

JUnit 4 および JUnit 5 でのアサーション

JUnit 4 と 5 の両方でのアサーションを見てみましょう。続きを読む →

Mockito を使用したモック例外スロー

Mockito で例外をスローするようにメソッド呼び出しを構成する方法を学びます。 続きを読む →

2. JUnit 5

JUnit 5 Jupiter アサーション API に assertThrows が導入されました 例外をアサートする方法。

これは、予想される例外のタイプと Executable を取ります ラムダ式を介してテスト対象のコードを渡すことができる機能的インターフェース:

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    Exception exception = assertThrows(NumberFormatException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

予想される例外がスローされた場合 assertThrows 例外を返します。これにより、メッセージに対してアサートすることもできます。

さらに、このアサーションは、囲まれたコードがタイプ NumberFormatException の例外をスローしたときに満たされることに注意することが重要です。 またはその派生型のいずれか。

これは、Exception を渡すと、 Exception であるため、予期される例外タイプとして、スローされた例外はアサーションを成功させます。 すべての例外のスーパータイプです。

RuntimeException を予期するように上記のテストを変更すると、 、これもパスします:

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceeds() {
    Exception exception = assertThrows(RuntimeException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

assertThrows() メソッドを使用すると、 を使用できるため、例外アサーション ロジックをよりきめ細かく制御できます。 コードの特定の部分を囲みます。

3. JUnit 4

JUnit 4 を使用する場合、単純に expected を使用できます。 @Test の属性 注釈 注釈付きテスト メソッドのどこかで例外がスローされることを期待していることを宣言します。

その結果、テストの実行時に、指定された例外がスローされない場合は失敗し、スローされた場合はパスします:

@Test(expected = NullPointerException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
    String test = null;
    test.length();
}

この例では、テスト コードが NullPointerException になることを期待していると宣言しました。 .

例外がスローされたことをアサートすることのみに関心がある場合は、これで十分です。

例外の他のプロパティを確認する必要がある場合は、ExpectedException を使用できます ルール。

メッセージを検証する例を見てみましょう 例外のプロパティ:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void whenExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NumberFormatException.class);
    exceptionRule.expectMessage("For input string");
    Integer.parseInt("1a");
}

上記の例では、最初に ExpectedException を宣言しています ルール。次に、テストでは、Integer を解析しようとするコードが 値は NumberFormatException になります 「入力文字列用」というメッセージが表示されます。

4.結論

この記事では、JUnit 4 と JUnit 5 の両方での例外のアサートについて説明しました。

サンプルの完全なソース コードは GitHub で入手できます。


Java タグ