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 での実行
- テストクラス右クリック →
Run As > JUnit Test - または
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 でカバレッジを可視化
テストを書くことで「動いている証拠」が残り、リファクタリングが安全になります。