ホームページ >Java >&#&チュートリアル >JUnit テストで例外を効果的にアサートするにはどうすればよいですか?

JUnit テストで例外を効果的にアサートするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 07:51:12953ブラウズ

How to Effectively Assert Exceptions in JUnit Tests?

JUnit テストでの例外アサーションの実行

コードの実行中に特定の例外がスローされることをアサートすることは、JUnit の一般的なテスト シナリオです。これを効果的に行うために、JUnit には読みやすさを高め、テスト プロセスを簡素化するメソッドがいくつか用意されています。

JUnit 5 および 4.13 アサーション

JUnit 5 および 4.13 では、@Test期待される属性を持つアノテーションを使用できます直接:

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThrows(IndexOutOfBoundsException.class, () -> emptyList.get(0));
}

AssertJ および Google Truth アサーション

AssertJ や Google Truth などの外部アサーション ライブラリは、例外に対する追加のメソッドを提供しますアサーション:

AssertJ:

import static org.assertj.core.api.Assertions.*;

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThatThrownBy(() -> emptyList.get(0))
        .isInstanceOf(IndexOutOfBoundsException.class);
}

Google Truth:

import static com.google.common.truth.Truth.*;

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThatCode(() -> emptyList.get(0)).willThrow(IndexOutOfBoundsException.class);
}

JUnit Pre-4.13アサーション(非推奨)

4.13 より前の JUnit バージョンでは、try-catch ブロック内の例外を手動でチェックするというより面倒なアプローチがありました。

@Test
public void testIndexOutOfBoundsException() {
    boolean thrown = false;
    ArrayList<Object> emptyList = new ArrayList<>();

    try {
        emptyList.get(0);  // Intentionally triggers an exception
    } catch (IndexOutOfBoundsException e) {
        thrown = true;
    }

    assertTrue(thrown);
}

このアプローチは非推奨です前述の方法ほど慣用的ではありません。詳細については、[JUnit テスト FAQ](https://junit.org/junit4/faq.html) を参照してください。

以上がJUnit テストで例外を効果的にアサートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。