SJ blog
Eclipse
Z

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

EclipseでJUnit 5テストを書いて実行する

EclipseでJUnit 5のテストクラスを作成し、@Test/@BeforeEach/@ParameterizedTestを使った実践的なテストの書き方と実行方法を解説します。

一言結論

@ParameterizedTestを使えば同じテストロジックを複数の入力値で自動実行でき、テストコードの重複を大幅に削減しながらカバレッジを上げられる。

JUnit 5 のセットアップ

Maven を使う場合

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

Maven なしの場合

Eclipse Marketplace から「JUnit」を検索してインストール、またはプロジェクトのビルドパスに JUnit 5 ライブラリを追加します。

テストクラスの作成

クラスを右クリック → New > JUnit Test Case:

  • テストクラス名を入力(慣習: 対象クラス名Test
  • @BeforeEach, @AfterEach のメソッドを含めるか選択
  • Next でテストするメソッドを選択できる
package com.example;

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

class CalculatorTest {

    private Calculator calculator;

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

    @Test
    void 足し算が正しく計算できる() {  // 日本語メソッド名もOK
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }

    @Test
    void ゼロで割るとArithmeticExceptionが発生する() {
        assertThrows(ArithmeticException.class, () -> {
            calculator.divide(10, 0);
        });
    }

    @Test
    void 計算結果が正の値である() {
        int result = calculator.add(1, 1);
        assertTrue(result > 0, "結果は正の値のはず");
    }
}

よく使うアサーション

// 値の一致
assertEquals(expected, actual);
assertEquals(expected, actual, "エラーメッセージ");

// null チェック
assertNull(value);
assertNotNull(value);

// boolean
assertTrue(condition);
assertFalse(condition);

// 例外の発生確認
assertThrows(IllegalArgumentException.class, () -> {
    obj.invalidMethod();
});

// 複数のアサーションをまとめて評価(どれが失敗したか全て分かる)
assertAll(
    () -> assertEquals(1, result.getA()),
    () -> assertEquals(2, result.getB()),
    () -> assertNotNull(result.getName())
);

// 配列の比較
assertArrayEquals(new int[]{1, 2, 3}, actual);

// 時間制限
assertTimeout(Duration.ofMillis(100), () -> {
    heavyProcess();
});

ライフサイクルアノテーション

@BeforeAll   // クラス内で一度だけ実行(static メソッド)
static void initAll() { ... }

@BeforeEach  // 各テストの前に実行
void setUp() { ... }

@AfterEach   // 各テストの後に実行
void tearDown() { ... }

@AfterAll    // クラス内で一度だけ実行(static メソッド)
static void cleanAll() { ... }

パラメータ化テスト

@ParameterizedTest
@ValueSource(strings = {"", " ", "  "})
void 空白文字列はisEmptyと判定される(String input) {
    assertTrue(StringUtils.isBlank(input));
}

@ParameterizedTest
@CsvSource({
    "2, 3, 5",
    "0, 0, 0",
    "-1, 1, 0",
    "100, 200, 300"
})
void 足し算のテスト(int a, int b, int expected) {
    assertEquals(expected, calculator.add(a, b));
}

@ParameterizedTest
@MethodSource("provideStrings")
void メソッドソースのテスト(String input, int expected) {
    assertEquals(expected, input.length());
}

static Stream<Arguments> provideStrings() {
    return Stream.of(
        Arguments.of("hello", 5),
        Arguments.of("world!", 6)
    );
}

テストのグループ化

@Nested
class 正常系テスト {
    @Test
    void 通常の入力で正しく動作する() { ... }
}

@Nested
class 異常系テスト {
    @Test
    void nullが渡されたとき例外が発生する() { ... }
}

Eclipse での実行

  1. テストクラス右クリック → Run As > JUnit Test
  2. または Ctrl+F11 でテスト実行(最後に実行した設定で)

JUnit ビュー:

  • 緑バー: 全テスト成功
  • 赤バー: 失敗あり
  • 失敗したテストをダブルクリック → エディタの失敗箇所にジャンプ

テストのフィルタリング

@Tag("slow")
@Test
void 時間のかかるテスト() { ... }

// Maven でタグを指定して実行
// mvn test -Dgroups=slow
// 一時的にスキップ
@Disabled("修正中のため一時スキップ")
@Test
void このテストは一時的に無効() { ... }

コードカバレッジの確認

Eclipse には EclEmma プラグインが標準搭載されています。

テスト右クリック → Coverage As > JUnit Test

エディタ上で:

  • : テストが通った行
  • : テストが通っていない行
  • : 部分的にカバー(条件分岐の一方だけ)

カバレッジビューで各クラスのカバレッジ率が確認できます。

まとめ

  • @Test でテストメソッドを定義
  • @BeforeEach でテスト前の初期化
  • assertAll で複数のアサーションをまとめる
  • @ParameterizedTest で入力パターンを網羅
  • EclEmma でカバレッジを可視化

テストを書くことで「動いている証拠」が残り、リファクタリングが安全になります。