JUnitファイルの作成

以下のような、2つ値を計算するプログラムを JUnitを生成してテストしてみたいと思います。

生成するJUnitの設定をする。

クラス名を選択した状態で、「Ctrl + 9」「command + 9」を押下します。
すると、下記のようなダイアログが表示するので、「はい」で作成しましょう。

生成するJUnitの設定を行う。

以下のように作成するJUnitの設定が開きます。
今回、testフォルダー上にJUnitのファイルを作成したいので、
「ソース・フォルダー」は、testフォルダー先を選択しています。
「次へ」ボタンを押下して、テスト対象を選びます。

今回は、addメソッドだけテストするものを作成しようと思うので、addのチェックボックスを選択して「完了」を押します。
JUintライブラリを追加していない場合は追加する旨のダイアログメッセージが表示されると思うので導入しましょう。

すると下記のようにサンプルが作成されると思います。

JUnitの記述

ではJUnitの中身を書いていきます。
基本的には以下の順で中身を書いていきます。
  • オブジェクト(インスタンス)の生成
  • 期待値(予想値)の設定
  • 実測値の設定
  • 期待値と実測値の比較
簡単に言うと、予想通りに結果がなっているか比較して確認する感じです。
今回は下記のように書きました。

・アサーションのインポート

import static org.junit.jupiter.api.Assertions.*;
上記の「import static パッケージ名.クラス名.メソッド名」の所は、
メソッド名を「*」にすることで、クラスのすべてのメソッドを呼び出せるようにしています。

18行目の「assertEquals」は、org.junit.jupiter.api.Assertionsクラスに含まれるメソッドで、「Assertions.assertEquals」のような「クラス名.メソッド名」で書かなくても「assertEquals」で使用できるようになってます。

・Testアノテーションのインポート

import org.junit.jupiter.api.Test;
上記のインポートにより、9行目の「@Test」アノテーションを使用することができます。
「@Test」をメソッド定義の前に記述することで、対象メソッドがテストメソッド
であることを示します。

JUnitの実施

クラスまたはメソッドを選択した状態で、「実行」>「JUnitテスト」を選択します。

するとJUnitのパースペクティブで実行結果が表示されます。
今回は無事に成功したみたいです。

Exceptionの判定

下記のように、テストされる側のソースでは、0で除算しようとするとExceptionが発生するようになっています。

public float div(int x, int y) {
		if (y == 0) throw new IllegalArgumentException("0で除算はできません。");
		return (float)x / y;
	}
JUnit側では、「try-catch」を使う方法と「assertThrows」を使う方法があります。

まずは単純に「try-catch」で例外に流れる方法です。

・「try-catch」を使う

@Test
@DisplayName("Exceptionキャッチのテスト")
	void testDivException() {
		// オブジェクト生成
		SimpleCalculator simCal = new SimpleCalculator();
		try {
			// 0で除算する。
			simCal.div(9, 0);
			// エラーにならず後続が呼ばれたら失敗
			fail("エラーをキャッチしませんでした。");
		} catch (IllegalArgumentException e) {
			// エラーをキャッチしたら成功
                       System.out.print("エラーをキャッチしました。");
		}
	}

次に例外を検証するメソッドの「assertThrows」を使う方法です。

第一引数には期待する例外のクラスを指定し、第二引数にはラムダ式またはメソッド参照を渡します。もし指定した例外がスローされなかった場合、テストは失敗します。

・「assertThrows」を使う

@Test
	void testDivException02() {
		// オブジェクト生成
		SimpleCalculator simCal = new SimpleCalculator();
		// ラムダ式で、0で除算する。
		assertThrows(IllegalArgumentException.class, () -> simCal.div(9, 0));
	}

実行された結果は以下のようになります。

他のアサーションも下記で説明してます。