JavaのJUnitテストの書き方とは?@Testからテストメソッドの作り方まで理解する

最終更新日

Schoo Java入門 中級 第3回 単体テストによるビジネスロジック検証

本記事は、Schooの「Java入門 中級【2026年版】」第3回「単体テストによるビジネスロジック検証」を学ぶ前後に、JUnitのテストクラスの書き方を整理したい方向けの記事です。

単体テストでは、assertEqualsassertThrows だけを覚えても、テストコード全体の形が見えていないと書きにくくなります。この記事では、@Test、テストメソッド、テスト対象の準備、結果の確認という流れで、JUnitの基本形を整理します。

Schoo コースページ:Java入門 中級【2026年版】

JUnitのテストは普通のJavaコードに近い形で書く

JUnitのテストコードも、基本的にはJavaのクラスとメソッドで書きます。違いは、テストとして実行したいメソッドに @Test を付けることです。

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

class ShippingFeeCalculatorTest {

    @Test
    void testCalculateFee() {
        ShippingFeeCalculator calculator = new ShippingFeeCalculator();

        int result = calculator.calculateFee(3000);

        assertEquals(500, result);
    }
}

このコードでは、ShippingFeeCalculatorcalculateFee メソッドを実行し、結果が 500 になるかを確認しています。

図解:JUnitのテストメソッドは準備・実行・確認で読む
1. 準備
テスト対象のクラスを使える状態にする
new Calculator()
2. 実行
確認したいメソッドを呼び出す
calculateFee(3000)
3. 確認
期待した結果と一致するかを見る
assertEquals(500, result)
JUnitのコードは、文法だけでなく「何を準備して、何を実行し、何を確認しているか」で読むと理解しやすくなります。

@Testはテストとして実行する目印

@Test は、そのメソッドをJUnitのテストとして実行するための目印です。@Test が付いているメソッドは、JUnitの実行対象になります。

図解:@Test が付いたメソッドがテストとして実行される
@Test
void testCalculateFee() {
  // テストの処理
}
JUnitが実行対象として扱う
実行ボタンやテスト実行時に、このメソッドの中身が確認されます。
@Test は、通常のメソッドを「テストとして実行するメソッド」にする目印です。

テストメソッドは、画面に文字を表示するためのものではありません。処理を実行して、期待した結果と合っているかを確認するためのメソッドです。

テスト対象のクラスを準備する

テストメソッドの中では、まずテスト対象のクラスを使える状態にします。インスタンスメソッドを確認する場合は、通常のJavaコードと同じように new でオブジェクトを作ります。

ShippingFeeCalculator calculator = new ShippingFeeCalculator();

この1行は、「これから ShippingFeeCalculator の動きを確認するために、テスト対象を用意している」と読めます。

メソッドを実行して結果を変数に入れる

次に、確認したいメソッドを実行します。戻り値がある場合は、結果を変数に入れてから assertEquals で確認すると、処理の流れが読みやすくなります。

int result = calculator.calculateFee(3000);

この例では、購入金額 3000 を渡したときの送料計算結果を result に入れています。

期待する結果をassertEqualsで確認する

最後に、期待する結果と実際の結果を比べます。戻り値を確認するときは、assertEquals を使います。

assertEquals(500, result);

第1引数の 500 は期待値、第2引数の result は実際の結果です。ここが一致すればテストは成功し、一致しなければ失敗します。

例外を確認するときはassertThrowsを使う

不正な値を渡したときに例外になることを確認したい場合は、assertThrows を使います。戻り値を比べるテストとは書き方が変わります。

@Test
void testCalculateFeeThrowsExceptionWhenAmountIsNegative() {
    ShippingFeeCalculator calculator = new ShippingFeeCalculator();

    assertThrows(
        IllegalArgumentException.class,
        () -> calculator.calculateFee(-1)
    );
}

このテストでは、-1 を渡したときに IllegalArgumentException が通知されることを確認しています。

テストメソッド名は確認内容が分かる名前にする

テストメソッド名は、テストが失敗したときにも表示されます。そのため、何を確認しているのかが分かる名前にしておくと、あとから原因を探しやすくなります。

図解:テストメソッド名は失敗したときの手がかりになる
読み取りやすい名前
testCalculateFeeWhenAmountIs3000
どの条件を確認しているかが分かる
手がかりが少ない名前
test1
失敗したときに何のテストか追いにくい
テストメソッド名は、あとでエラー一覧を見たときに内容を思い出せる名前にしておくと便利です。

最初は長く感じても、testCalculateFeeWhenAmountIs3000 のように、対象メソッドと条件が分かる名前にしておくと読み返しやすくなります。

確認問題

次の仕様を確認するJUnitテストを書いてください。

DiscountCalculatorcalculateDiscountRate メソッドは、購入金額が10000円以上なら 10、5000円以上10000円未満なら 5、5000円未満なら 0 を返す。

500010000 の境界値を含めて、JUnitのテストメソッドを作ってみましょう。

演習後の確認:こちらのページを使って、自分で書いた内容を見直せます。

まとめ

  • JUnitのテストは、Javaのクラスとメソッドとして書く
  • @Test は、JUnitにテストとして実行してもらうための目印
  • テストメソッドは、準備、実行、確認の流れで読む
  • 戻り値は assertEquals、例外は assertThrows で確認する
  • テストメソッド名は、確認内容が分かる名前にする

関連する記事

シェアする