Java: Quick JUnit (Eclipseプラグイン) のインストールとユニットテストのチュートリアル

本記事はEclipseとJUnitによるコーディング・ユニットテストサイクルを便利にするQuick JUnitプラグインのインストール方法と基本的なテストコード・テスト実行のチュートリアルを記載している。

本記事の実行環境

Mac OS, Java7, Eclipse 4.32, JUnit4, Quick JUnit v0.7となる。仮にOSがWindows版だとしても内容の大筋は大差ない。

Quick JUnitのインストール

Eclipseのメニューバー「Window」→「Eclipse Marketplace」をクリック。
eclipse_marketplace_menu
検索ボックスにquick junitを入力して検索するとプラグインが表示されるので、installボタンをクリック。
install_quick_junit
後はウィザードに従ってダウンロード、再起動するとインストールは完了する。

テスト対象クラス・メソッドの作成

ここでは、サンプルとして下記のBMI (ボディマス指数)を計算するクラス・メソッドをテスト対象とする。

package info.yukun.bmi;
public class BMIcalc {
	/**
	 *
	 * @param w weight (kg)
	 * @param h height (m)
	 * @return BMI (body mass index) value
	 */
	public int bmi(double w, double h) {
		if (w <= 0 || h <= 0) throw new IllegalArgumentException("weight or height is zero or minus number.");
		return (int) Math.round(w / (h * h));
	}
}
&#91;/java&#93;
上記コードを入力後、プロジェクトにテストコードを保管する為の「test」ソースフォルダを作成しておく。
<h3>テストコードの作成</h3>
続いてテスト対象コードのクラス宣言行(public class BMIcalc { の箇所)でcommand+9 (Win環境ではCtrl+9)を押下すると、そのクラスに対応するテストクラスが作成されていない場合は、テストクラスを作成するよう、プロンプトが表示される。
<a href="https://yukun.info/wp-content/uploads/2014/05/junit_create_test_class_prompt.png"><img src="https://yukun.info/wp-content/uploads/2014/05/junit_create_test_class_prompt.png" alt="junit_create_test_class_prompt" width="400" height="219" class="alignnone size-full wp-image-3863" /></a>
ここで、Yesを押下すると、下図のようにテストクラスの作成画面に遷移する。
<a href="https://yukun.info/wp-content/uploads/2014/05/junit_create_test_class.png"><img src="https://yukun.info/wp-content/uploads/2014/05/junit_create_test_class.png" alt="junit_create_test_class" width="500" height="573" class="alignnone size-full wp-image-3864" /></a>
テストコードの保管先がtestになっていることを確認してfinishを押下。
下図のようにJUnitをパスに追加するかの確認画面が表示されるので、追加するでOKを押下。
<a href="https://yukun.info/wp-content/uploads/2014/05/junit_add_path_prompt.png"><img src="https://yukun.info/wp-content/uploads/2014/05/junit_add_path_prompt.png" alt="junit_add_path_prompt" width="400" height="193" class="alignnone size-full wp-image-3865" /></a>
初期のテストコードは下記の通りとなる。
[java]
package info.yukun.bmi;
import static org.junit.Assert.*;
import org.junit.Test;
public class BMIcalcTest {
	@Test
	public void test() {
		fail("Not yet implemented");
	}
}

テストコードの実行

この状態で試しにテストコードを実行するには、このテストコードファイルを右クリックしコンテキストメニューのDebug As→JUnit Testをクリック。
junit_test_excute
まだ実装していない為、実行結果は以下の通りfailureとなる。
junit_test_fail_nocode

テストコードの実装

以下が、今回のテストコードとなる。

package info.yukun.bmi;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import org.junit.Test;
public class BMIcalcTest {
	@Test
	public void bmiCalculateBodymassindex() {
		BMIcalc calc = new BMIcalc();
		int expected = 20;
		int actual = calc.bmi(50.0, 1.6);
		assertThat(actual, is(expected));
	}
	@Test(expected = IllegalArgumentException.class)
	public void bmi0exceptionOfweight() {
		BMIcalc calc = new BMIcalc();
		calc.bmi(0, 1.6);
	}
	@Test(expected = IllegalArgumentException.class)
	public void bmiMinusexceptionOfweight() {
		BMIcalc calc = new BMIcalc();
		calc.bmi(-50.0, 1.6);
	}
	@Test(expected = IllegalArgumentException.class)
	public void bmi0exceptionOfheight() {
		BMIcalc calc = new BMIcalc();
		calc.bmi(50, 0);
	}
	@Test(expected = IllegalArgumentException.class)
	public void bmiMinusexceptionOfheight() {
		BMIcalc calc = new BMIcalc();
		calc.bmi(50, -1.6);
	}
}

JUnitのフレームワーク上、テストクラスはpublic、メソッドはorg.junit.Testアノテーション(@Test)を付与したpublicメソッド、かつ戻り値void、引数無しとする。
メソッドの中身のテストコードはテスト対象のコードの実行結果値と期待される値の比較で検証する。その比較に用いられるメソッドが、junit.AssertクラスのassertThatメソッド。上述の第二引数に使われているisメソッドはassertThatに使われるMatcherオブジェクトを作成するためのファクトリメソッド。
再度テストを実行すると以下の通り緑のバーで全量正常完了を示す。
junit_test_noerror
仮にbmiCalculateBodymassindex()のexpectedの値を19にセットして実行すつと当然failureとなるがFailure Trace画面でExpectedと実際の値を確認できるので、次のアクションを取りやすい。
junit_test_fail

参考サイト