JUnit入門|Java単体テストの基本をわかりやすく解説

アイキャッチ画像

JUnitとは?

JUnitは、Javaで書かれたプログラムの単体テストを行うためのライブラリです。

開発者が自分のコードが正しく動いているかを自動的に検証することができます。

Javaを使った開発ではほぼ標準的に使われており、IDEにも統合されているため、簡単に導入・実行ができます。

JUnitの導入方法

JUnitを使うには、以下のJavaの開発環境が必要です。

・Java

・IDE(Eclipse、IntelliJ IDEAなど)

・ビルドツール(Maven、Gradleなど)

テストクラスとテストメソッドの作成

JUnitでテストを行うには、「テスト対象のクラス」に対して「テスト専用のクラス」を作成します。

たとえば、次のような簡単なCalculatorクラスがあるとします

public class Calculator {

    public int add(int a, int b) {

        return a + b;

    }

}

テストクラスの例:CalculatorTest.java

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

    @Test

    void testAdd() {

        Calculator calc = new Calculator();

        int result = calc.add(2, 3);

        assertEquals(5, result); // 結果が期待通りかチェック

    }

}

@Testアノテーションとは?

@Test は、そのメソッドが「テストである」ことを示すマークです。

JUnitはこのアノテーションがついたメソッドを自動で探して、実行してくれます。

注意点:

@Testをつけないと、テストメソッドとして実行されません。

メソッドの戻り値はvoid、引数はなし。

アサーション

アサーションとは、「値が期待通りであることを確認するための命令」です。

代表的なものは以下のとおりです。

メソッド

assertEquals(a, b) aとbが等しいことを確認

assertTrue(x) xがtrueであることを確認

assertFalse(x) xがfalseであることを確認

assertThrows() 例外が発生するかを確認

テスト実行と結果の見方

・成功時の見え方

テストを実行してすべてが成功すると、IDE上で緑色のバーやチェックマークが表示されます。

これは「すべてのテストが期待通りに動いた」ことを意味します。

・失敗時の見え方

もしassertEquals(5, result)が5ではなかった場合、テストは失敗し、赤色のバーになります。

また、IDEのテスト結果ウィンドウにエラー内容が表示されます。

便利なアノテーション紹介

JUnit5では、テストの前後処理などを柔軟に行えるアノテーションが用意されています。

@BeforeEach / @AfterEach

これらは各テストメソッドの前後で自動的に実行される処理を定義するために使います。

import org.junit.jupiter.api.*;

public class SampleTest {

    Calculator calc;

    @BeforeEach

    void setup() {

        calc = new Calculator(); // 毎回新しいインスタンスを準備

        System.out.println("テスト開始前の準備");

    }

    @AfterEach

    void cleanup() {

        System.out.println("テスト終了後の後片付け");

    }

    @Test

    void testAdd() {

        assertEquals(5, calc.add(2, 3));

    }

}

出力は次のようになります:

テスト開始前の準備

テスト終了後の後片付け

@Disabled(テストの一時的な無効化)

特定のテストメソッドを「一時的に実行しない」ようにしたい場合、@Disabledを使います。

@Test

@Disabled("実装中のため一時停止")

void testMultiply() {

    // 未完成なのでスキップ

}

IDE上では「スキップ」として表示されますが、ビルドやCI/CDでは「無視されたテスト」として記録されます。