はじめに
Googleのインフラで実行されるクラウドサービス Google App Engineが2009年4月7日にJavaに対応しました。Javaエンジニアにも利用できるようになった、Google App Engineを一緒に勉強して行きましょう!
今回はGoogle App Engineを利用したプログラムにUnitテストを実行する方法を勉強したいと思います。
対象読者
- ウェブサービス開発に興味のあるJavaエンジニア
- Google App Engine for Javaに興味がある方
必要な環境
- 「Google Plugin for Eclipse」がインストールされている、Eclipse 3.3(Europa)か3.4(Ganymede)
- Google Plugin for Eclipseに含まれるApp Engine SDKのバージョン1.2.2以降
開発環境の構築手順については、第1回の解説を参照してください。
この連載を開始した初期の頃に[Google Plugin for Eclipse]をセットアップされた方は、App Engine SDKのバージョンが1.2.0か1.2.1になっていると思います。Eclipseのメニューから[Help]-[Software Updates]で、[Available Software]タブを選択し、[Google Update Site for Eclipse 3.X]にチェックを入れて[Install]ボタンを押してApp Engine SDKをアップデートして下さい。
Unitテストとは?
Unitテストとは、個々のモジュール(部品)を対象としたテストです。テストの目的は、バグを事前に発見して製品の品質を高めることです。
バグを早い段階で発見し、設計を強固にする手法として、契約による設計(Design by Contract、以下DbC)と呼ばれる設計手法が有効であることは10年以上前からバートランド・メイヤー氏によって提唱されています。DbCでは、個々のモジュールを次の3つの条件を用いた契約として定義します。
- 事前条件 - 入力に対する条件
- 事後条件 - 出力に対する条件
- 不変条件 - 入出力に関わらず常に成立する条件
Javaの公式ドキュメントにもDbCに関する記述があることからも分かるように、近年ではDbCの有効性が多くの開発者によって支持されています。
Unitテストを用いることで、プログラムに修正を加えた後にもDbCの設計が破壊されていないことを補償することができ、DbCの堅牢性を維持することができます。
プロジェクトによっては、テストプログラムを書く十分な時間がなかったり、テストプログラムを書く文化がないままソースコードが大規模化してしまっていることがあると思います。
そんな場合に、私がオススメしているのは、一度バグが発生し、デバッグが完了したタイミングで、修正したメソッドに対してテストプログラムを書くことです。メソッド2~3個に数パターンのテストプログラムを書くことはそんなに時間がかかりません。 バグの混入箇所に絆創膏をあてて守っていくようなイメージでテストプログラムを書いていきます。多くの場合、バグが混入しやすい箇所というのはプログラム全体でも限られているので、即効性があることが多いです。
このようにデバッグ範囲に対して、テストプログラムを開発することで、少なくとも自分が過去に修正した範囲は、他人が付近のプログラムを修正したことによって動かなくなるようなデグレードから守ることができます。
ApiProxyを使ってみよう!
ApiProxyを利用すると、Google App Engineの全サービスにアクセスすることができます。テストプログラムでは、このApiProxyを利用することで各サービスのデータを調べることになります。
まずは、以下の設定でApp Engineのプロジェクトを作成してください。今回はGWTを利用しませんので、Use Google Web Toolkitのチェックはハズして下さい(第2回の解説を参照して下さい)。また、日本語(2バイトコード)を扱いたいので、言語設定を必ず[UTF-8]に設定してください。
Project name | UnitTest |
Package | com.daisukeyamashita.test.unit |
ライブラリの追加
Google App Engineでは、プログラムのテストを簡単にするために、ローカルのテスト環境用のスタブが用意されています。Unitテストを実行するには、スタブを含めたいくつかライブラリを別途追加する必要があります。
[プロジェクト名]を右クリックし、[Properties]を選択します。
[Java Build Path]-[Libraries]タブで、[Add External JARs]ボタンを押して、以下の2つのライブラリを追加します。
少し深いですが、以下のディレクトリにあるappengine-api.stubs.jar
とappengine-local-runtime.jar
を追加します。
(Eclipseのインストールディレクトリ)\plugins \com.google.appengine.eclipse.sdkbundle_1.2.2.v200907131030 \appengine-java-sdk-1.2.2\lib\
続いて、[Add Library]ボタンを押します。[JUnit]を選択して、[Next]ボタンをクリックします。JUnitのバージョンを選択する画面に切り替わりますが、JUnit3を利用するので、そのまま[Finish]ボタンをクリックします。