技術の犬小屋

Webプログラミングを餌に生きる犬のメモ帳

先日,東北デベロッパーズコミュニティの6周年記念ワークショップ祭りに参加した。テスト駆動開発の要領,Gradleの導入方法,JUnitでのテストの書き方などを講師の方に指南していただいたので,忘れないようにまとめておく。
 

テスト駆動開発とは

テスト駆動開発(TDD: test driven development)とは,プログラム開発手法の一種で,プログラムに必要な各機能について,最初にテストを書き(これをテストファーストと呼ぶ),そのテストが動作する必要最低限な実装を行った後,コードを洗練させる,という短い工程を繰り返すスタイルである。
テスト駆動開発は,以下のようなサイクルで開発が進んでいく。

  1. 失敗するテストを書く
  2. できる限り早く、テストがパスするような最小限のコード本体を書く
  3. コードの重複を除去する(リファクタリング)

 
具体的な例としては,次のようになる。

  1. helloメソッドの戻り値として,”Hello”を期待するテストを作成する
  2. テストを実行し,失敗していることを確認する
  3. helloメソッドにreturn "Hello";を記述する
  4. テストを実行し,成功していることを確認する
  5. helloメソッドに”1″という引数を与えた際の戻り値として,”こんにちは”を期待するテストを作成する
  6. テストを実行し,失敗していることを確認する
  7. helloメソッドをif(argument == 1){ return "こんにちは"; } else{ return "Hello"; }に書き換える
  8. テストを実行し,成功していることを確認する
  9. helloメソッドに”2″という引数を与えた際の戻り値として,”Bonjour”を期待するテストを作成する
  10. テストを実行し,失敗していることを確認する
  11. helloメソッドをif(arg == 1){ return "こんにちは"; } else if(arg == 2){ return "Bonjour"; } else { return "Hello"; }に書き換える
  12. テストを実行し,成功していることを確認する
  13. ……

 
テスト駆動開発は,このようにテストの失敗と成功を繰り返しながら進めていく。テストの実行環境ツールであるJUnitやxUnitでは,テストの失敗を赤いバー,成功を緑のバーで通知するため,上記のサイクルはRed/Green/Refactorと称される。
 

テスト駆動開発を行うための環境を構築する

今回は,以下のツールを使ってテスト駆動開発を実践する。

  • Eclipse (IDE)
  • Gradle (ビルドシステム)
  • JUnit (ユニットテストフレームワーク)

 
それぞれのツールについて簡単に説明すると,EclipseはJava言語のプログラム開発に特化したIDEである。GradleはMakeやAnt,Mavenのようなビルドシステムの一つ。JUnitは,テストを簡単に記述できるようにするためのテストフレームワークである。
 
以下より,各ツールのセットアップ方法を説明する。尚,Gradleのインストールは任意で構わない。Gradleをインストールしなくても本稿を読み進める上での支障はない。JUnitはEclipseのプロジェクトにあらかじめ含まれているので,個別にセットアップする必要はない。
 

Eclipseをセットアップする

Eclipseの公式サイトから,Eclipseをダウンロードし,インストールする。
 

Gradleをセットアップする

Gradleの公式サイトからGradleをダウンロードし,圧縮フォルダを解凍し,適当な場所に設置する。
解凍したフォルダのパスを環境変数GRADLE_HOMEに設定する。また、GRADLE_HOME/binにパスを通しておく。
 
ちなみに,yum,MacPorts,homebrewなどのパッケージ管理ツールからインストールする方法や,GVM(Groovy enVironment Manager)からインストールする方法もあるので,ターミナルが使えるのであれば,こちらの方法をお勧めする。
 
homebrewからGradleをインストールする場合は,以下のコマンドをターミナルに打ち込む。

#Gradleをインストールする
brew install gradle

#Eclipseプロジェクトのルートに移動して,GradleとEclipseを関連付ける
gradle eclipse

 
GVMからGradleをインストールする場合は,以下のコマンドをターミナルに打ち込む。

#Gradleをインストールする
gvm install gradle

#Eclipseプロジェクトのルートに移動して,GradleとEclipseを関連付ける
gradle eclipse

 

ユニットテストを書いてみる

ユニットテストを書き始めるにあたって,まずはプロジェクトを作成するところから順を追って説明する。
上部メニューの「ファイル」の「新規」から「Java プロジェクト」を選択する。
プロジェクト作成用のウィンドウが開くので,「プロジェクト名」を入力する。
 
project_name
 
「次へ」を選択し,「ライブラリー」のタブへ移動する。
 
add_library
 
「ライブラリーの追加」から「JUnit」を選択する。
「次へ」を選択し,JUnitのバージョンが4になっていることが確認できたら,「完了」を選択する。
プロジェクト作成のウィンドウの方も「完了」を選択する。
 
これでプロジェクトを作成することができた。
 
続いて,テストコードの対象となるプロダクトコードを作成する。
プロジェクトを右クリックし,「新規」から「クラス」を選択する。
パッケージ名を「main」,クラス名を「Sample」と名付け,「完了」を選択する。
作成したSample.javaに以下のコードを記述する。

package main;

public class Sample {

    public String say() {
        return "Hello, World!";
    }

}

 
プロダクトコードが完成したので,今度はこのコードに対してテストコードを作成する。
プロジェクトを右クリックし,「新規」から「JUnit テスト・ケース」を選択する。
パッケージ名を「main」,クラス名を「SampleTest」と名付け,「完了」を選択する。
作成したSampleTest.javaに以下のコードを記述する。

package main;

import main.Sample;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

public class SampleTest {

    @Test
    public void test() {
        final Sample sut = new Sample();
        final String expected = "Hello, World!";
        final String actual = sut.say();
        assertThat(actual, is(expected));
    }

}

 
SampleTest.javaを右クリックし,「実行」から「1 JUnit テスト(1)」を選択する。
ここでJUnitによるテストが実行されるはずだ。JUnitのタブが表示され,緑色のバーが表示されていれば,テストは成功である。
この時点でエラーが発生している場合は,コードが間違えていないかどうかの確認や,Javaのコンパイラのバージョンを下げてみるなどして対応してほしい。
 
 
煩雑な文章になってしまったが,テスト駆動開発の流れとJUnitによるユニットテストの導入を説明した。JUnitによるユニットテストの書き方の詳細については,この記事だけではまとめきれないので,また次回の記事で取り上げる。
 
 
以上
 
 
参考
テスト駆動開発 – Wikipedia
東北デベロッパーズカンファレンス2014「6周年記念ワークショップ祭り!」JUnitハンズオン

Amazon EC2でロードバランサーを作成する方法 arrow-right
Next post

arrow-left WordPressテンプレートタグの使い方
Previous post

コメントを残す