Javaでテストケースを作るには?正常系・境界値・異常系をJUnitで確認する方法

本記事は、Schooの「Java入門 中級【2026年版】」第3回「単体テストによるビジネスロジック検証」を学ぶ前後に、Javaでテストケースを作る考え方を整理したい方向けの記事です。
JUnitの書き方を覚えても、「どの値をテストすればいいのか」が決まっていないと、意味のある単体テストにはなりにくいです。この記事では、日本語の仕様からテストケースを作り、JUnitコードに落とし込む流れを整理します。
Schoo コースページ:Java入門 中級【2026年版】
テストケースは入力と期待する結果のセット
テストケースとは、「何を入力して、どの結果になることを確認するか」を決めたものです。単体テストでは、メソッドに渡す値と、期待する戻り値や例外を先に整理します。
たとえば送料計算なら、「3000円を渡したら送料500円」「5000円を渡したら送料0円」のように、入力値と期待する結果を組み合わせて考えます。
まず日本語の仕様を読む
いきなりJUnitのコードを書き始めるのではなく、まず日本語の仕様を確認します。
購入金額が5000円以上なら送料は0円。5000円未満なら送料は500円。購入金額が0円未満の場合はエラーとする。
この仕様から、正常に処理される値、条件が切り替わる値、不正な値を分けて考えます。
正常系を決める
正常系は、普通に使ったときに期待どおり動くかを確認するテストケースです。送料計算なら、5000円未満の代表値として 3000、5000円以上の代表値として 10000 などを選べます。
assertEquals(500, calculator.calculateFee(3000));
assertEquals(0, calculator.calculateFee(10000));
正常系だけでも動作確認にはなりますが、条件式の間違いを見つけるには境界値も必要です。
境界値を決める
境界値は、条件が切り替わる境目の値です。「5000円以上なら送料無料」の場合、5000 が境界になります。
境界値では、境目の直前、ちょうど、直後を確認すると、> と >= の書き間違いに気づきやすくなります。
assertEquals(500, calculator.calculateFee(4999));
assertEquals(0, calculator.calculateFee(5000));
assertEquals(0, calculator.calculateFee(5001));
異常系を決める
異常系は、不正な値を渡したときに、想定どおり処理できるかを確認するテストケースです。今回の仕様では、購入金額が0円未満の場合はエラーにします。
assertThrows(
IllegalArgumentException.class,
() -> calculator.calculateFee(-1)
);
戻り値を確認する場合は assertEquals、例外を確認する場合は assertThrows を使います。
テストケース表に整理する
確認したい値が増えてきたら、先にテストケース表に整理すると、抜け漏れに気づきやすくなります。
テストケース表をJUnitコードに変換する
テストケース表ができたら、戻り値を確認する行は assertEquals、例外を確認する行は assertThrows に変換します。
@Test
void testCalculateFee() {
ShippingFeeCalculator calculator = new ShippingFeeCalculator();
assertEquals(500, calculator.calculateFee(3000));
assertEquals(500, calculator.calculateFee(4999));
assertEquals(0, calculator.calculateFee(5000));
assertEquals(0, calculator.calculateFee(5001));
assertEquals(0, calculator.calculateFee(10000));
}
@Test
void testCalculateFeeThrowsExceptionWhenAmountIsNegative() {
ShippingFeeCalculator calculator = new ShippingFeeCalculator();
assertThrows(
IllegalArgumentException.class,
() -> calculator.calculateFee(-1)
);
}
1つのテストメソッドにすべて詰め込むこともできますが、慣れてきたら正常系、境界値、異常系でテストメソッドを分けると、失敗したときに原因を追いやすくなります。
確認問題
次の仕様から、テストケースを考えてください。
購入金額が10000円以上なら会員ランクはGOLD。5000円以上10000円未満ならSILVER。5000円未満ならBRONZE。購入金額が0円未満の場合は例外とする。
正常系、境界値、異常系に分けて、入力値と期待する結果を整理してください。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
まとめ
- テストケースは、入力値と期待する結果のセット
- いきなりJUnitを書く前に、日本語の仕様を整理する
- 正常系、境界値、異常系に分けるとテストすべき値を決めやすい
- 戻り値は
assertEquals、例外はassertThrowsで確認する - テストケース表を作ると、確認漏れに気づきやすい