JavaのassertThrowsとは?例外が起きることをテストする考え方

本記事は、Schooの「Java入門 中級【2026年版】」第3回「単体テストによるビジネスロジック検証」を学ぶ前後に、JUnitの assertThrows の考え方を整理したい方向けの記事です。
assertEquals が戻り値を確認するためのものなら、assertThrows は例外が通知されることを確認するためのものです。不正な入力を渡したときに、想定どおり処理を止められるかをテストできます。
Schoo コースページ:Java入門 中級【2026年版】
assertThrowsは例外が通知されることを確認する
メソッドに不正な値を渡したとき、戻り値ではなく例外で知らせる設計にすることがあります。たとえば、購入金額に -1 を渡すようなケースです。
assertThrows は、不正な入力を渡したときに、期待した例外が通知されるかを確認します。戻り値の確認と例外の確認を分けて考える
正常な入力では、メソッドが値を返します。この場合は assertEquals で期待値と実際の結果を比べます。
一方、不正な入力では、値を返すのではなく例外を通知することがあります。この場合は assertThrows を使います。
assertThrowsの基本形
assertThrows では、第1引数に期待する例外クラスを書きます。第2引数には、例外が起きるはずの処理を書きます。
assertThrows(
IllegalArgumentException.class,
() -> calculator.calculateFee(-1)
);
このテストは、「calculator.calculateFee(-1) を実行すると、IllegalArgumentException が通知されるはず」という意味です。
例外が起きなければテストは失敗する
assertThrows は、例外が起きることを期待するテストです。そのため、例外が起きなかった場合はテスト失敗になります。
public int calculateFee(int amount) {
if (amount < 0) {
throw new IllegalArgumentException("購入金額は0円以上で指定してください。");
}
if (amount >= 5000) {
return 0;
}
return 500;
}
このメソッドでは、amount が0未満の場合に IllegalArgumentException を通知します。したがって、-1 を渡すテストでは assertThrows を使えます。
例外メッセージも確認できる
assertThrows は、発生した例外オブジェクトを戻り値として受け取れます。これを使うと、例外メッセージまで確認できます。
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> calculator.calculateFee(-1)
);
assertEquals("購入金額は0円以上で指定してください。", exception.getMessage());
例外の種類だけを確認したい場合は、最初の assertThrows だけでも確認できます。メッセージまで大切にしたい場合は、getMessage() の結果も確認します。
確認問題
次のメソッドについて、-1 を渡したときに IllegalArgumentException が通知されることを確認するテストを書いてください。
public int calculateFee(int amount) {
if (amount < 0) {
throw new IllegalArgumentException("購入金額は0円以上で指定してください。");
}
if (amount >= 5000) {
return 0;
}
return 500;
}
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
まとめ
assertThrowsは、期待した例外が通知されるかを確認する- 第1引数には期待する例外クラスを書く
- 第2引数には、例外が起きるはずの処理を書く
- 戻り値として例外オブジェクトを受け取ると、メッセージも確認できる
- 正常系は
assertEquals、異常系はassertThrowsと分けて考えると整理しやすい