たなかのJava日記

どんなことをやったか(学んだか)、どこで詰まったか(わからなかったか)、どこで工夫したかの記録です。

Junitのセットアップ(Maven)

前回「渡された年がサッカーワールドカップ開催年」であるかどうか、
を調べるメソッドを作成しました。
しかし、バグがあるので自動テストで修正するといったところで終わっています。
今回は続きとして修正行う予定でしたが、まずは自動テストの基礎固めを実施できればと思います。
具体的には、足し算を行うクラスのテストを行う流れを確認します。

まずは前提知識としてプログラムのテストについて学びます。

■プログラムのテストで確認していること
プログラムのテストは自動でも手動でも確認することは同じです。
何を確認しているのかというと、"用意した入力に対して期待通りの出力が得られるかどうか"です。
また、期待通りの出力とは以下が考えられます。
・メソッドの引数に用意した値を渡し、事前に割り出した期待される結果と一致するかどうか
・メソッド内でファイル出力やデータベースへの書き出しなどがあれば、その結果も期待通りであるか

これらを確認するプログラムを書きやすくするために生まれた、
Javaで最も標準的に使われるフレームワークJunit(らしい)です。
バージョンは現在5.x系が最新になります。

Junitのセットアップ
まず、足し算を行うクラスのテストを実施したいので
通常通りコードを作成します。

package test;
/**
 * 足し算
 */
public class Calc {
    /**
     * 渡された2つの値の足し算を行う
     * @param a 一つ目の値
     * @param b 二つ目の値
     * @return 足し算の結果
     * @since 2022/11/12
     */
    public int add(int a, int b) {
        return a * b;
    }
}

今回は練習として足し算を行うところで掛け算を行うという簡単なバグを仕込みました。
ここから、IntelliJ IDEAでJunitのテストの準備をしていきます。

IntelliJ IDEAでJunitのテスト開始手順

①Calc.javaを開いている状態で[Ctrl]+[Shift]+[T]を押下します。
ポップアップが表示されるので[新規テストの作成...]を選択します。
[テストの作成]というダイアログが開きます。
★補足説明
[Ctrl]+[Shift]+[T]は、実装コードとテストコードを相互にジャンプするショートカットキーです。
テストコードを作成していない場合は、[新規テストの作成...]から[テストの作成]で必要事項を埋めます。

②[テストの作成]では、テストライブラリに「Junit5」を選択します。
次の行には「Junit5ライブラリがモジュールに見つかりません」とあるので[修正]をクリックします。
続いて、「次のテストメソッドを生成」で左にあるチェックボックスにチェックを入れ[OK]をクリックします。
★補足説明
「Junit5ライブラリがモジュールに見つかりません」とは、プロジェクトのpom.xmlに、まだJunit5への依存が宣言されていませんよ~という意味です。
今回は依存を宣言するので[修正]をクリックすると、pom.xmlに「junit-jupiter」への依存が追加されているのがわかります。
jupiterはJnit5のコードネームのことらしいです。

③これでCalc.Test.javaが作成されます。
Junitのテストはクラスファイルとして表現され、src/test/java以下に配置します。
ここに自動テストのコードを記載していきます。
また、テストを行うクラスのことを「テストクラス」と呼びます。
★補足説明
テストクラス内の個別テストでは@Testアノテーションを付けた、
引数がなく戻り値がない(void)のメソッドとして実装します。
自動生成されたテストクラスでは@Testアノテーションがパッケージ名付きになっていることがあります。

package test;

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

class CalcTest {
//@Testアノテーションがパッケージ名付きになっている
    @org.junit.jupiter.api.Test
    void add() {
    }
}

気になる場合は[Alt]+[Enter]を押すと表示されるポップアップで
[修飾された名前指定をimportに変換]を選択してください。
パッケージをインポートして@Testのみにすることができます。

package test;

import org.junit.jupiter.api.Test;

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

class CalcTest {
//パッケージをインポートして@Testのみになった
    @Test
    void add() {
    }
}

④テストの中身はまだ実装していませんが[Ctrl]+[Shift]+[F10]を押して実行してみます。

このショートカットキーを使用した時は、テキストカーソル位置で実行の動作が変わるので注意です。
・テストメソッド内にカーソル有⇒そのテストメソッドのみ実行
・テストメソッド外&テストクラス内にカーソル有⇒テストクラスすべてのテストメソッド実行

ショートカットキーを使用しない場合
・テストクラス横の[すべて実行]ボタンを押すと、テストクラス内全てのテストメソッドを実行。
・テストメソッド横の[一つ実行](▶)ボタンを押すと、そのテストメソッドのみ実行できます。

 

これで最低限の準備が整いました。
次回はテストケースの実装、実装コードの修正を行います。