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

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

【プログラミング 105.5時間目】JUnitを使ってみた。

スポンサーリンク

JUnitの本が出ていたので迷わず購入した。これは超期待と思って勉強すると、期待通りの詳しい解説だった。

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)


こんな本を待っていた。早速勉強したことのまとめ。
まずは入門的なところから。
★★
ユニットテストは、クラスやメソッドがプログラマの期待した振る舞いをすることを検証する。

継続的インテグレーションテスト駆動開発、振舞駆動開発などはすべて、ユニットテストが基盤となっている。

JUnitとは、Kent BeckやErick Gammaによって開発されたJavaのテスティングフレームワークである。

フレームワークとは、特定の目的で実行させるプログラムを作るための枠組みである。


JUnitの開発環境構築
JDKのインストール(省略)
Eclipseのセットアップ(省略)
<メモ>
※本ではEclipseは英語版のまま使うことを推奨しています。
理由は、
・すべてのメッセージが翻訳されているわけではないこと
・英語版を使っても困ることが少ないこと
・エンジニアであれば英語のドキュメントは避けて通れないこと

EclipseのデフォルトエンコーディングはMS932(Shift_JIS)である。
日本語のクラス名を利用するときに不都合が生じることがあるので、Eclipseの起動設定を変更し、
デフォルトエンコーディングをUTF-8にすることを推奨している。
Eclipseのデフォルトエンコーディングを変更するにはeclipse.iniを開き、

-Dfile.encofing=UTF-8

という行を追加する。

Eclipseのテキストファイルのデフォルトエンコーディングを変更する方法
「ウィンドウ」→「一般」→「ワークスペース」→「テキスト・ファイルのエンコード

・Quick JUnitプラグインをインストールする。
→テストクラスとテスト対象クラスとの切り替えがショートカットでできるようになる。

・Quick JUnitプラグインのインストール方法
「ヘルプ」→「Eclipseのマーケットプレース」→「Quick JUnit」で検索する→「インストール」をクリック


JUnitのサンプルを作成する
JUnitのJARファイル(junit-4.10.jar)のダウンロードは以下から。
http://sourceforge.jp/projects/sfnet_junit/downloads/junit/4.10/junit-4.10.jar/

このjarにビルドパスを通す。
プロジェクトで「右クリック」→「外部アーカイブの追加」→ダウンロードしたJUnitのjarを選択

サンプルクラスを作成

package junit.sample;

public class Calculator {
	public int multiply(int x, int y) {
		return x * y;
	}
	public int divide(int x, int y) {
		return x/y;
	}
	public int add(int x, int y) {
		return x + y;
	}
}

テストクラスを作成
・テストクラスはテスト対象のクラスとは異なるソースフォルダに作成する。
ソフトウェアとしてリリースするプロダクションコードとリリース対象にならないテストコードを明確に分けたほうが都合が良いためである。
「ビルドパス」→「新規ソース・フォルダー」をクリック→「test」フォルダーw作成

「test」フォルダーで右クリック→「新規JUnitテスト・ケース」
パッケージ:junit.sample
クラス:CalculatorTest
テスト元クラス:junit.sample.Calculator
を記載して「完了」

JUnitテストの実行
テストクラスを右クリック(これをコンテキストメニューを開くという)
→「実行」→「JUnitテスト」を選択する

■テストコードを記述ルール
・テストクラスはpublicクラスであること
・テストメソッドはorg.junit.Testアノテーションを付与したpublicメソッドであること
・テストメソッドは戻り値がvoidであり、引数を持たないこと
・throws句は自由に定義可能

テストコードのサンプル

package junit.sample;

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

import org.junit.Test;

public class CalculatorTest {

	@Test
	public void addで43の加算結果が取得できる() {
		Calculator calc = new Calculator();
		int expected = 7;
		int actual = calc.add(3,4);
		assertThat(actual, is(expected));
	}
	
	@Test
	public void addで50の加算結果が取得できる() {
		Calculator calc = new Calculator();
		int expected = 5;
		int actual = calc.add(5,0);
		assertThat(actual, is(expected));
	}

	@Test(expected = ArithmeticException.class)
	public void divideで70のときIllegalArgumentExceptionを送出する() {
		Calculator calc = new Calculator();
		calc.divide(7,0);
	}
}

JUnitテストの実行で、テストが通れば緑色のバーが表れる。
例外のテストをする例が一番下のメソッドである。

テスト駆動開発とは?
ユニットテストを作り、具体的な値を当てはめることで、プログラムの潜在的な問題を見つけること。
テスト対象クラスが完璧に設計されていることを前提とせずに、「何を検証するべきか?」を意識して効果的なユニットテストを心がけること。
このような考え方を強く意識する開発手法のことを「テスト駆動開発」という。

★★
まだ読み始めだけど、非情に読み応えのある本だと思う。
実際の本では、もっと詳しく開発環境の構築やフォルダ体系など省略せずに解説してくれているので、ぜひぜひJUnitを使いはじめる人は参考にしてほしい本だと思いました。

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)