読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

ユニットテストをはじめる

JUnit
<スポンサーリンク>

今更ながらJUnitの勉強を始める(再開する)ので、調べたことをメモする。

■Eclipseのプロキシ設定方法
Quick JUnitをダウンロードしたり、色々とプラグインをインストールするときに、EclipseからWebサイトにアクセスできる必要がある。
プロキシ環境内にいるときは、Eclipseでプロキシを設定しないと、ネットにつなげることができない。

ウィンドウ→設定→一般→ネットワーク接続

でプロキシの設定ができる。
「ネイティブ」というのは、自分のコンピュータの設定をパクって設定するものだ。
IEでいうと、インターネットオプションで設定されたものが適用される。

「直接」というのは、たぶん、Eclipseでポップアップされて入力を促すモード。
マニュアルというのは、自分で設定するモードである。

自分は「マニュアル」設定を使っている。
HTTPのところを選択して、「編集」をクリック。

すると、「プロキシー・エントリーの編集」という画面が出てくるので、そこにプロキシサーバのホスト名、ポートを入力する。
ユーザ名やパスワードが必要であれば、「認証が必要」というチェックボックスにチェックを入れて、ユーザ名とパスワードを入力する。


■Quick JUnitのインストール方法
ヘルプ→Eclipseマーケットプレイスで検索(I):に「Quick JUnit」と入力して、「実行」をクリックする。
Quick JUnitが表示されるので、「インストール」をクリックする。


■JUnitのダウンロード
ここからjarをダウンロードして、ビルドパスに追加するだけ。
公式ページは以下。
http://junit.org/

公式以外にも色々とダウンロードサイトはある。
junit-4.11.jarのMavenリポジトリ。
http://mvnrepository.com/artifact/junit/junit/4.11

junit4は単独では動かず、hamcrest-coreに依存している(depends)ので、hamcrestのjarをダウンロードして、一緒にビルドパスに通す必要がある。
https://code.google.com/p/hamcrest/downloads/list

■テスト対象クラスの作成
デフォルトでできるソースフォルダである「src」で右クリック「新規」→「クラス」を選択。
「新規Javaクラス」のダイアログが出るので、パッケージ名、クラス名を入力する。

■テストクラスの作成
テストクラスはテスト対象クラスとは異なるソースフォルダに作成する。
プロジェクト名を右クリックして、「新規ソース・フォルダー」を選択。
新規ソースフォルダのフォルダー名に「test」と入力して「完了」をクリックする。

ソースフォルダができたら、「新規」→「JUnitテスト・ケース」を選択する。

そこで「新規JUnit4 テスト」を選択し、「テスト対象クラス名Test」という名前のクラスを作成する。


■テストの実行
テストを実行するには、テストクラスを右クリックして「実行」→「JUnitテスト」をクリックする。
すると、テストを実行することができる。

■Assertion
以下を参考に、ものすごく単純なユニットテストを実行してみる。
https://github.com/junit-team/junit/wiki/Assertions

フォルダ構成は以下の通り。

f:id:sho322:20140608113012j:plain

テスト対象クラス
Calculator.java

package example;

public class Calculator {

	public int add(int x, int y) {
		return x + y;
	}

	public int subtract(int x, int y) {
		return x - y;
	}

	public int multiply(int x, int y) {
		return x * y;
	}

	public int divide(int x, int y) {
		return x / y;
	}
}

テスト実行クラス
CalculatorTest.java

package example;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;

public class CalculatorTest {

	@Test
	public void getMultiply4x5() {
		Calculator cal = new Calculator();
		int expected = 20;
		int actual = cal.multiply(4, 5);
		assertThat(actual, is(expected));
	}

	@Test
	public void getMultiply6x9() {
		Calculator cal = new Calculator();
		int expected = 54;
		int actual = cal.multiply(6, 9);
		assertThat(actual, is(expected));
	}


	@Test
	public void  getMultiply12x12() {
		Calculator cal = new Calculator();
		int expected = 100;
		int actual = cal.multiply(12, 12);
		assertThat(actual, is(expected));
	}


}


1つはわざと期待する結果を間違えている(12x12=144のところを、100としている)
これでテストを実行すると、以下のように表示される。
失敗したらレッドバーが出てくる。

f:id:sho322:20140608113051j:plain

12x12の部分のexpectedが間違っていた(=テストが不適切だった)ので、修正して実行してみる。

	@Test
	public void  getMultiply12x12() {
		Calculator cal = new Calculator();
		int expected = 144;
		int actual = cal.multiply(12, 12);
		assertThat(actual, is(expected));
	}

すると、以下のようにグリーンバー表示される。

f:id:sho322:20140608113058j:plain

テストは常にグリーンでいることが期待されている。
逆に言うと、思い切ってソースを書き換えても、テストがグリーンだったら安心できると言える。


<参考>

経験ゼロでもできるプログラミング現場の単体テスト

経験ゼロでもできるプログラミング現場の単体テスト