Eclipse で JUnit
参考にした Web ページ
http://www.javaroad.jp/opensource/js_eclipse9.htm (現存しない)
前準備
JDK (Java Development Kit) のインストール
Eclipse のインストール
新規プロジェクトの作成
- 「File (ファイル)」→「New (新規)」→「Project (プロジェクト)」
- 「Java」→「Java Project (Javaプロジェクト)」を選択→「Next (次へ)」
- 新規Javaプロジェクトのウインドウが開くので,プロジェクト名を付ける(1行目). プロジェクト名には好きにつけて良いが,全角文字は避ける.分かりやすい名前が良い.
例題:Money クラスの単体テスト
- クラス Money の作成
- パッケージ・エクスプローラ内にプロジェクト一覧が表示されている. プロジェクト名を選んで右クリック
- 「New (新規)」→「Class (クラス)」
- パッケージ名を「hoge.hoge.com」のように(ドメイン名)を付ける(2行めの「Package (パッケージ)」のところ)
- クラス名を付ける(4行目の「Name (クラス)」のところ).ここでは Money と付ける.
- 「Finish (終了)」
- 単体テスト用クラス MoneyTest の定義
- パッケージ・エクスプローラ内で,さっき作ったパッケージ名を選んで右クリック
- 「New (新規)」→「JUnit Test Case」
- JUnit Test Case のウインドウが開く
最初に JUnit Test Case を作成するときに限り
JUnit 3.8.1 is not on the build path of project 'hogehoge'. Click here to add JUnit 3.8.1 to the build path and open the build path dialog.
と出るので「Click Here」をクリックする.
- クラス名を付ける.ここでは MoneyTest と付ける.(4行目の「Name 」のところ)
- テスト用のメソッドを定義
MoneyTest.java に,テスト用メソッド testAdd() を定義する.
パッケージ・エクスプローラ内でMoneyTest.javaをダブルクリックし,次のように書く.
public void testAdd() { Money m12CHF= new Money(12, "CHF"); Money m14CHF= new Money(14, "CHF"); Money expected= new Money(26, "CHF"); Money result= m12CHF.add(m14CHF); assertTrue(expected.equals(result)); };
- テスト対象クラスの定義と,単体テストの実行
- テスト対象のクラス Money におけるメソッドの「ひな型」を生成
- 上記で編集したMoneyTest.java を保存した時点でコンパイルされる. このとき,コンパイルエラーが出るが構わない.
- まず,エディタ(MoneyTest.java のエディタ)の「Money m12CHF= new Money(12, "CHF");」の左端にあるマーカ(黄色と赤)を 左クリックして,「Create constructor ...」を選び,ダブルクリック.これで,Money クラスのコンストラクタ(中身は空)が生成される.
- 今度は,エディタ(MoneyTest.java のエディタ)の「Money result= m12CHF.add(m14CHF);」の左端にあるマーカ(黄色と赤)を 左クリックして,「Create method ...」を選び,ダブルクリック.これで,Money クラスの add() メソッド(中身は空)が生成される.
- 単体テスト実行の試み
テスト対象のクラス Money について, 単体テスト機能を試して見ます.
- Eclipse のパッケージエクスプローラで,MoneyTest.java を右クリック
- 「Run As (実行)」→「JUnit Test」を選ぶ.
- JUtil の画面が開き,テスト結果が表示される. コンストラクタとメソッドを,まだ定義していないので,「エラー」が出ます(これで,単体テスト機能が動いたことが確認できる).
- テスト対象クラスの定義
パッケージ・エクスプローラを表示させ, Money.javaをダブルクリックし,Money クラスを次のように定義
package hoge.hoge.com; public class Money { int amount; String base; public Money(int i, String string) { amount = i; base = string; } public boolean equals(Money m) { if( ( amount == m.amount ) && ( base.equals( m. base ) ) ) { return true; } return false; } public Money add(Money x) { if ( base.equals( x. base ) ) { Money added = new Money( amount + x.amount, base ); return added; } return null; } }
- 再度単体テスト実行を行ってみる.
Eclipse のパッケージエクスプローラで,MoneyTest.java を右クリック. 「Run As (実行)」→「JUnit Test」を選ぶ. デバッグ機能を使いたいときは,「Debug As (実行)」→「JUnit Test」を選ぶ.
青色のバーが表示され,単体テストに成功したか,確認すること.
例題:StringUtil クラスの単体テスト
- クラス StringUtil の作成
- パッケージ・エクスプローラ内にプロジェクト一覧が表示されている. プロジェクト名を選んで右クリック
- 「New (新規)」→「Class (クラス)」
- パッケージ名を「hoge.hoge.com」のように(ドメイン名)を付ける(2行めの「Package (パッケージ)」のところ)
- クラス名を付ける(4行目の「Name (クラス)」のところ).ここでは StringUtil と付ける.
- 「Finish (終了)」
- 単体テスト用クラス StringUtilTest の定義
- パッケージ・エクスプローラ内で,さっき作ったパッケージ名を選んで右クリック
- 「New (新規)」→「JUnit Test Case」
- JUnit Test Case のウインドウが開くので, クラス名を付ける.ここでは StringUtilTest と付ける.
- テスト用のメソッドを定義
StringUtilTest.java に,テスト用メソッド testSplit() を定義
- パッケージ・エクスプローラ内でStringUtilTest.javaをダブルクリックし,次のメソッドを作成.
public void testSplit() { /* 文字列の分割 * 入力の例: 文字列“a,b,c” * 出力の例: カンマで文字列を分割してString型の配列[“a”][“b”][“c”]を返す */ String str = "a,b,c"; String [] result = StringUtil.commasplit(str); assertNotNull(result); assertEquals(3, result.length); assertEquals(result[0], "a"); assertEquals(result[1], "b"); assertEquals(result[2], "c"); };
- テスト対象クラスの定義と,単体テストの実行
- テスト対象のクラス StringUtil におけるメソッド commasplit() の「ひな型」を生成
上記で編集したStringUtilTest.java を保存した時点でコンパイルされる. このとき,コンパイルエラーが出るが構わない.
エディタ(StringUtilTest.java のエディタ)の「String[] result = StringUtil.commasplit(str);」の左端にあるマーカ(黄色と赤)を 左クリックして,「Create method 'commasplit(String)'」を選び,ダブルクリック. これで, StringUtil クラスのメソッド commasplit() の「ひな型」が生成される.
- StringUtil クラスのメソッド commasplit() の定義
- パッケージ・エクスプローラ内でStringUtil.javaをダブルクリックし,StringUtil を次のように定義
package hoge.hoge.com; import java.util.StringTokenizer; public class StringUtil { public static String[] commasplit(String str) { /* 文字列の分割 * 入力の例: 文字列“a,b,c” * 出力の例: カンマで文字列を分割してString型の配列[“a”][“b”][“c”]を返す */ StringTokenizer st = new StringTokenizer(str, ","); int length = st.countTokens(); String [] result = new String[length]; for (int i = 0; i < length; i++) { result[i] = st.nextToken(); } return result; } }
- 単体テスト実行を行ってみる.
Eclipse のパッケージエクスプローラで,StringUtilTest.java を右クリック. 「Run As (実行)」→「JUnit Test」を選ぶ. デバッグ機能を使いたいときは,「Debug As (実行)」→「JUnit Test」を選ぶ.
青色のバーが表示され,単体テストに成功したか,確認すること.
- テスト対象のクラス StringUtil におけるメソッド commasplit() の「ひな型」を生成
演習
Java Servlet サンプルプログラム
「Eclipse を使用しての Java サーブレット・プログラムの開発」の Web ページに記載の HelloWorld クラスについて,単体テストの実行を各自で試す.
JUnit 5 のページ: https://junit.org/junit5/