本記事はEclipseとJUnitによるコーディング・ユニットテストサイクルを便利にするQuick JUnitプラグインのインストール方法と基本的なテストコード・テスト実行のチュートリアルを記載している。
本記事の実行環境
Mac OS, Java7, Eclipse 4.32, JUnit4, Quick JUnit v0.7となる。仮にOSがWindows版だとしても内容の大筋は大差ない。
Quick JUnitのインストール
Eclipseのメニューバー「Window」→「Eclipse Marketplace」をクリック。
検索ボックスにquick junitを入力して検索するとプラグインが表示されるので、installボタンをクリック。
後はウィザードに従ってダウンロード、再起動するとインストールは完了する。
テスト対象クラス・メソッドの作成
ここでは、サンプルとして下記の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)); } } [/java] 上記コードを入力後、プロジェクトにテストコードを保管する為の「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をクリック。
まだ実装していない為、実行結果は以下の通りfailureとなる。
テストコードの実装
以下が、今回のテストコードとなる。
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オブジェクトを作成するためのファクトリメソッド。
再度テストを実行すると以下の通り緑のバーで全量正常完了を示す。
仮にbmiCalculateBodymassindex()のexpectedの値を19にセットして実行すつと当然failureとなるがFailure Trace画面でExpectedと実際の値を確認できるので、次のアクションを取りやすい。