テスト対象となるクラスの作成
単体テストの対象となるクラスを作成します。連載第4回で使用した逆ジオコーディングメソッドを定義しています。
緯度経度を渡し、Google Map逆ジオコーディングAPIを利用して住所情報を取得するメソッドgetGoogleMapAddressを定義します。コードについては連載第4回を参照してください。緯度経度を渡し、逆ジオコーディングで得られた住所情報を配列で返却するメソッドです。
サンプル実行の際にはGoogle Mapsを利用するので、Google Maps APIのページよりMaps APIキーを取得後、config.php内にMaps APIキーの値を記述してください。
それでは、このメソッドの単体テストを始めます。
単体テストひな型の作成
PHPUnitでは単体テストを行うクラスからテスト用のクラスを作成するためのジェネレーターが用意されています。
以下のように、phpunitコマンドのオプション「--skeleton-test」を使用してジェネレーターを起動します。
phpunit --skeleton-test Util
上記コマンドの実行後、 UtilTest.phpの名前でテスト用のクラスのひな型が作成されます。
単体テスト実体クラス
前項のコマンドで単体テスト用PHPのひな型が作成されました。
そのコードは以下のようになっています。
require_once 'PHPUnit/Framework.php'; require_once 'Util.php'; /** * Test class for Util. * Generated by PHPUnit on YYYY-MM-DD at HH:mm:ss. */ class UtilTest extends PHPUnit_Framework_TestCase { /** * @var Util */ protected $object; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $this->object = new Util; } # 略 /** * @todo Implement testGetGoogleMapAddress(). */ public function testGetGoogleMapAddress() { // Remove the following lines when you implement this test. $this->markTestIncomplete( 'This test has not been implemented yet.' ); } # 略
大まかな構造として、PHPUnitのテストケースとして動作するオブジェクトクラスPHPUnit_Framework_TestCaseの継承後に、setUp()メソッドでテストを行うクラスの初期化が行われ、単体テスト対象クラスのメソッドに「test」と名前の付いたテスト用のメソッドのコードが生成されます。
テスト用クラス内で使用される主なメソッドは以下のとおりです。
メソッド名 | 概要 |
setUp() | テスト開始時に実行される初期化メソッド |
tearDown() | テスト終了時に実行されるメソッド |
testXXXX() | テスト対象クラスのXXXXメソッドのテストメソッド |
自動生成されたコードを参照すると、setUp()メソッドでテスト対象となるUtilクラスの初期化が行われ、testGetGoogleMapAddress()メソッドでUtilクラスのgetGoogleMapAddressメソッドのテスト用のコードが生成されていることが分かります。
phpunitコマンドのテストクラス自動生成機能を利用しない場合にも、上記と同様のクラスを作成することでPHPUnit_Framework_TestCaseを継承してテストを行うことができます。
本項ではテストクラスのスケルトンを作成しただけなので、次項で具体的な単体テスト部分の記述を追加していきます。