assertThatを使用してコードが例外をスローすることを確認する方法


メソッドを使用して、コードが期待通りに例外をスローするかどうかをテストする方法を紹介します。

まず、JUnitの依存関係をプロジェクトに追加します。Mavenを使用している場合は、pom.xmlファイルに以下の依存関係を追加します。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
</dependency>

次に、テストクラスを作成します。例として、以下のようなメソッドがあるクラスをテストするとします。

public class Calculator {
    public int divide(int dividend, int divisor) {
        if (divisor == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return dividend / divisor;
    }
}

このクラスのdivideメソッドはゼロでの除算を防ぐために例外をスローします。

テストクラスでは、assertThatメソッドを使用して例外がスローされることを確認します。以下は、このテストの例です。

import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class CalculatorTest {
    private final Calculator calculator = new Calculator();
    @Test
    void divide_DivisorZero_ThrowsIllegalArgumentException() {
        assertThrows(IllegalArgumentException.class, () -> calculator.divide(10, 0));
    }

    @Test
    void divide_DivisorNonZero_DoesNotThrowException() {
        assertThat(() -> calculator.divide(10, 2), instanceOf(IllegalArgumentException.class));
    }
}

最初のテストでは、assertThrowsメソッドを使用して、IllegalArgumentExceptionがスローされることを確認しています。もしスローされない場合、テストは失敗します。

2番目のテストでは、assertThatメソッドを使用して、IllegalArgumentExceptionがスローされないことを確認しています。もしスローされた場合、テストは失敗します。

このようにして、assertThatメソッドを使用してコードが例外をスローすることをテストできます。これにより、例外処理が正しく実装されているかどうかを確認することができます。

このブログ投稿では、assertThatメソッドを使用してコードが例外をスローすることを確認する方法を解説しました。これにより、テストを通じて例外処理の正確性を確認できます。