** JUnitによるユニットテスト [#g8fba70c]

#setlinebreak(on);

JUnitによるユニットテストの方法を記載する。
テストファーストとする為、ここでは先にテストコードを作成する。

(1) 前準備

 1.1 junit.jar をビルドパスに追加する。
   ・対象のプロジェクトを右クリック -> [プロパティ] -> [Javaのビルドパス] -> [ライブラリ]を選択。
   ・[ライブラリの追加] で JUnit を追加する。
    ※JUnitがない場合は junitプラグインをダウンロード&インストールしてから上記の操作を行う。
     複数人プロジェクトで使用する場合は lib に放り込んでおきつつ、CLASSPATHに含めておくといいかも。
 1.2 テストコード格納用のソースフォルダを作成する
   ・[新規] -> [ソースフォルダ] ※ここではフォルダ名を test とする
 1.3 テストクラスの出力先を設定する(実際のソースとテストコードを分ける為)
   ・プロジェクトを右クリック -> [プロパティ] -> [Javaのビルドパス] -> [ソース] を選択
   ・[ソースフォルダ毎に出力フォルダの指定を可能にする] をチェックする。
   ・テストコード用のフォルダ展開して、出力フォルダーをテストコード用のフォルダと同じ所に設定する。
    ※これでテストコードのクラスがコンパイルされると、テストコード用のフォルダに出力されるようになる。

#html(<table><tr><td style="padding-left:20px;">&nbsp;</td><td align="top" style="padding-top:0px;">)
&ref(junit_init.jpg,nolink);
#html(</td></tr></table>);

 1.4 ファイル構成
   ・順番が前後するが、最終的に作成するファイルの構成は下図のようになる。※test_junitはプロジェクト名
#html(<table><tr><td style="padding-left:20px;">&nbsp;</td><td align="top" style="border:1px solid #000000;padding-top:0px;">)
&ref(junit00.jpg,nolink);
#html(</td></tr></table>);

(2) テスト対象クラス仕様の確認

 テスト対象となるクラスの仕様は以下の通りとする。

|パッケージ名|クラス名|メソッド名|引数|処理内容|h
|util|MyMath|add|int a, int b|a + b を返す|
|~|~|sub|int a, int b|a - b を返す|
|~|~|mul|int a, int b|a * b を返す|
|~|~|div|int a, int b|a / b を返す&br;0割りされた場合はExceptionでなく0を返す|

(3) 空のテスト対象クラスを作成する 

 package util;
 
 public class MyMath {
 
	/*
	 * 足し算
	 */
	public static int add(int a, int b){
		return 0;
	}
 
	/*
	 * 引き算
	 */
	public static int sub(int a, int b){
		return 0;
	}
 
	/*
	 * 掛け算
	 */
	public static int mul(int a, int b){
		return 0;
	}
 
	/*
	 * 割り算
	 */
	public static int div(int a, int b){
		return 0;
	}
 }
  ※エラー確認を行う為に、とりあえず全て0を返すように。

(4) テストコードの作成と対象クラスの修正

 4.1 テストクラスの作成

  1. [MyMath.javaを右クリック] -> [新規] -> [JUnitテスト・ケース]
  2. ソースフォルダをテストコード用のフォルダに変更して [次へ]
  3. テストしたいメソッドにチェックを入れて[終了]

 4.2 テストクラスを下記のようにコーディングする。
    見ての通り、例えば '''メソッドA''' のテストコードは、 test'''メソッドA''' というメソッドに記述する。
    ※Java1.5対応のJUnitであれば、この名前規則に従う必要はなく @Test というアノテーションを記述すれば良い。
 package util;
 import junit.framework.TestCase;
 
 /*
  * MyMathのテストケース
  */
 public class MyMathTest extends TestCase {
 
 	public MyMathTest(String arg0) {
 		super(arg0);
 	}
 
 	/**
 	 * 足し算のテスト
 	 */
 	public void testAdd() {
 		int res1 = MyMath.add(1,2);
 		assertEquals(3, res1);
 
 		int res2 = MyMath.add(0,0);
 		assertEquals(0, res2);
 
 		int res3 = MyMath.add(1,-4);
 		assertEquals(-3, res3);
 	}
 
 	/**
 	 * 引き算のテスト
 	 */
 	public void testSub() {
 		int res1 = MyMath.sub(1,2);
 		assertEquals(-1, res1);
 
 		int res2 = MyMath.sub(0,0);
 		assertEquals(0, res2);
 
 		int res3 = MyMath.sub(1,-4);
 		assertEquals(5, res3);
 	}
 
 	/**
 	 * 掛け算のテスト
 	 */
 	public void testMul() {
 		int res1 = MyMath.mul(1,2);
 		assertEquals(2, res1);
 
 		int res2 = MyMath.mul(0,0);
 		assertEquals(0, res2);
 
 		int res3 = MyMath.mul(1,-4);
 		assertEquals(-4, res3);
 
 		int res4 = MyMath.mul(-2,-4);
 		assertEquals(8, res4);
 	}
 
 	/**
 	 * 割り算のテスト
 	 */
 	public void testDiv() {
 		int res1 = MyMath.div(6,2);
 		assertEquals(3, res1);
 
 		int res2 = MyMath.div(10,6);
 		assertEquals(1, res2);
 
 		int res3 = MyMath.div(0,10);
 		assertEquals(0, res3);
 
 		int res4 = MyMath.div(10,0);
 		assertEquals(0, res4);
 	}
 }

(5) テストの実行

 5.1 とりあえず一回テストを実行してみる。
  ・MyMathTest.java を右クリック -> [実行] -> [JUnitテスト]

#html(<table><tr><td align="top" style="padding-left:20px;padding-top:0px;">[実行結果](MyMath が、まだきちんと実装されていないので、当然コケル。)<br/>)
&ref(junit01.jpg,nolink);
#html(</td></tr></table>);

 5.2 MyMathの各メソッドを下記のように実装して、再度テストを実行。

 package util;
 
 public class MyMath {
 
	/*
	 * 足し算
	 */
	public static int add(int a, int b){
		return a + b;
	}
 
	/*
	 * 引き算
	 */
	public static int sub(int a, int b){
		return a - b;
	}
 
	/*
	 * 掛け算
	 */
	public static int mul(int a, int b){
		return a * b;
	}
 
	/*
	 * 割り算
	 */
	public static int div(int a, int b){
 		return a / b;
	}
 }

#html(<table><tr><td style="padding-left:20px;padding-top:0px;">[実行結果]<br/>)
&ref(junit02.jpg,nolink);
#html(</td></tr></table>);

 5.3 testDivでコケている事がわかるので、障害トレースに表示された情報を元に、
   MyMathのdivメソッドを下記のように修正して再度、テストを実行。

 /*
  * 割り算
  */
 public static int div(int a, int b){
 	if (b == 0){
 		return 0;
 	} else {
 		return a / b;
 	}
 }

#html(<table><tr><td style="padding-left:20px;padding-top:0px;">[実行結果]<br/>)
&ref(junit03.jpg,nolink);
#html(</td></tr></table>);

  エラーがなくなった。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS