JUnitによるJavaユニットテストの実践

JUnitテストフレームワークの概要

JUnitはJavaアプリケーションのユニットテストを効率的に行うためのフレームワークです。このツールにより、開発者はコードの正確性を検証しながら品質を保つことができます。

ユニットテストの重要性

ユニットテストはソフトウェアの最小実行単位(通常はメソッド)を検証する手法です。JUnitはアノテーションとアサーションメソッドを提供することで、テストコードの作成と実行を簡素化します。

基本的な使用手順

  1. MavenまたはGradle経由でJUnitライブラリをプロジェクトに追加
  2. 対象クラスごとにテストクラスを作成し、各メソッドに対してテストメソッドを実装
  3. テストメソッドはpublicで引数なし、戻り値なしであること
  4. @Testアノテーションをテストメソッドに付与
  5. IDEのJUnitランナーを使用してテストを実行

アサーションの基本

org.junit.Assert.assertEquals(expectedValue, actualValue);

期待値と実測値の比較に使用されます。不一致の場合はテストが失敗します。

主要アノテーション

  • @Test - テストメソッドの定義
  • @BeforeEach - 各テストメソッド実行前の前処理
  • @AfterEach - 各テストメソッド実行後の後処理
  • @BeforeAll - クラス全体の初期化処理(staticメソッド)
  • @AfterAll - クラス全体の終了処理(staticメソッド)

実装例:計算機クラス

public class Calculator {
    public int sum(int a, int b) {
        return a + b;
    }

    public int difference(int a, int b) {
        return a - b;
    }

    public int product(int a, int b) {
        return a * b;
    }

    public int quotient(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("除数はゼロ以外を指定してください");
        }
        return a / b;
    }
}

テストクラスの実装

import org.junit.jupiter.api.*;

public class CalculatorTest {
    
    private Calculator calculator;

    @BeforeAll
    static void setupClass() {
        System.out.println("テスト開始準備");
    }

    @BeforeEach
    void setup() {
        calculator = new Calculator();
    }

    @Test
    void sumTest() {
        int result = calculator.sum(2, 3);
        Assertions.assertEquals(5, result, "2+3の結果が5であること");
    }

    @Test
    void differenceTest() {
        int result = calculator.difference(5, 2);
        Assertions.assertEquals(3, result, "5-2の結果が3であること");
    }

    @Test
    void productTest() {
        int result = calculator.product(3, 4);
        Assertions.assertEquals(12, result, "3×4の結果が12であること");
    }

    @Test
    void divideTest() {
        int result = calculator.quotient(10, 2);
        Assertions.assertEquals(5, result, "10÷2の結果が5であること");
    }

    @Test
    void divideByZeroTest() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            calculator.quotient(5, 0);
        }, "ゼロ除算時にIllegalArgumentExceptionがスローされること");
    }

    @AfterEach
    void teardown() {
        calculator = null;
    }

    @AfterAll
    static void cleanup() {
        System.out.println("テスト終了処理");
    }
}

テスト実行結果

テスト成功時は緑色のインジケータ、失敗時は赤色のインジケータが表示されます。

タグ: JUnit Java ユニットテスト アノテーション アサーション

5月27日 10:58 投稿