EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

IntelliJ IDEAでJavaコードのユニットテストをする手順

背景

Javaを勉強するにあたり、開発環境としてIntelliJ IDEAを使い始めた。
作成したクラスのユニットテストコードを作成・実行する機能がとても
便利なので、その際の手順をメモしておく。

目次

JUnitによるユニットテスト

JUnitとは、Javaで開発されたプログラムのユニットテストを自動化するための
フレームワークである。IntelliJ IDEAでは、このJUnitを利用してテスト対象クラスの
ユニットテストを簡単に生成・実行できるようになっている。
ja.wikipedia.org

ユニットテスト実行手順

1. テスト対象のクラスを作成する

以前、この記事にも書いたように、まずは専用プロジェクトを作成し、
テスト対象のクラスのコードを書く。
www.eureka-moments-blog.com

今回は下記のように、銀行口座の名義人名と残高の情報を管理するクラスを
作成してみた。

/*
 * Bank account class
 * Record owner's name and balance data
 * Author: Shisato Yano
 */

public class Account {
    String owner;
    int balance;

    // constructor
    public Account(String owner, int balance) {
        this.owner = owner;
        this.balance = balance;
    }

    // transfer money from this account to another account
    public void transfer(Account dest, int amount) {
        dest.balance += amount;
        this.balance -= amount;
    }
}

2. テストコード用ディレクトリを作成する

作業中のプロジェクトディレクトリにある.imlファイルを右クリックし、
f:id:sy4310:20220305110545p:plain
開いたメニューから「新規」-> 「ディレクトリ」と進んで、
下記のようにtestディレクトリを作成する。
f:id:sy4310:20220305110925p:plain

3. 作成したディレクトリをテスト用に設定する

左上の「ファイル」メニューから「プロジェクト構造」を選択。
開いた画面の左メニューから「モジュール」を選択する。
f:id:sy4310:20220305111820p:plain
先程作ったtestディレクトリを右クリックし、「テスト」を選択。
「OK」で閉じると、作成したtestディレクトリの色が緑色になる。
f:id:sy4310:20220305112146p:plain

4. テスト用クラスを作成する

最初に作成したAccountクラスのコードにカーソルを合わせると、
このように電球のマークが表示される。
f:id:sy4310:20220305114045p:plain
マークの右にある下矢印を押し、表示されるメニューから
「テストの作成」を選択。

この画面が開くので、テストコードのクラス名などを決めて「OK」を押す。
f:id:sy4310:20220305115329p:plain

すると、このようにテストコードがtestディレクトリ内に自動で作成される。
(この時点ではまだテストの中身は空)
f:id:sy4310:20220305120621p:plain

作成直後の状態だと、上記のようにimport文のjunitのパスに赤線が引かれている。
これは、必要なライブラリであるJUnitにパスが通っていないことを意味する。
ここで、赤線部分にカーソルを合わせると、「JUnitをクラスパスに追加する」と
いうポップアップメッセージが出るのでそれをクリックする。

すると、このようにJUnitのライブラリをダウンロードする画面になるので、
OKを押してダウンロードする。完了すると、ライブラリがクラスパスに追加
され、赤線も消えるはず。
f:id:sy4310:20220305121711p:plain

5. テストコードの中身を記述する

上記の段階ではまだテストの中身が何もない状態なので、
具体的なテストコードを記述する。今回は下記のような
テストコードにしてみた。

import org.junit.jupiter.api.Test;

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

class AccountTest {
    @Test
    public void testOwner() {
        Account account = new Account("Hoge", 10);
        assertEquals("Hoge", account.owner);
    }

    @Test
    public void testBalance() {
        Account account = new Account("Hoge", 10);
        assertEquals(10, account.balance);
    }

    @Test
    public void testTransfer() {
        Account account_src = new Account("Hoge", 10);
        Account account_dest = new Account("Fuga", 20);
        account_src.transfer(account_dest, 5);
        assertEquals(25, account_dest.balance);
        assertEquals(5, account_src.balance);
    }
}

6. テストコードを実行する

最後に、作成したテストコードを実行してみる。
テストコードのクラス定義部分の左に下記のような緑の
アイコンがあるはずなので、それを押し、表示される
メニューから「実行 AccountTest」を選択する。

するとテスト対象コードとテストコードがビルドされ、
テストが実行される。問題なければ、下記のように全テスト
ケースが成功するはず。
f:id:sy4310:20220305123056p:plain

逆にこのとき、期待される結果通りにならないテストがあると、
このようにどのテストが失敗したかを教えてくれる。
f:id:sy4310:20220305123416p:plain