単体テストメソッドの記述
前項で自動生成されたコードの中に実際のテスト用コードを記述します。
具体的にはテストメソッドの中でassertEquals()のようなアサーションメソッド(後述)を使用して、期待される値と実際の値が等しいことを確かめます。
testGetGoogleMapAddressメソッド内に緯度経度とそれに該当する住所を記述してテストします。
緯度経度、住所情報についてはwikipediaを参照しました。
public function testGetGoogleMapAddress() { // 東京タワー $address = $this->object->getGoogleMapAddress('35.658611', '139.745556'); $this->assertEquals('東京都港区芝公園4丁目2-8', $address['pref'] . $address['city'] . $address['town'] . $address['detail']); // 三鷹の森ジブリ美術館 $address = $this->object->getGoogleMapAddress('35.696233','139.570431'); $this->assertEquals('東京都三鷹市下連雀1丁目1-83', $address['pref'] . $address['city'] . $address['town'] . $address['detail']); // 浅草寺 $address = $this->object->getGoogleMapAddress('35.714731', '139.796756'); $this->assertEquals('東京都台東区浅草2丁目3-1', $address['pref'] . $address['city'] . $address['town'] . $address['detail']); }
アサーションメソッドとはあらかじめ予想される値と、メソッド実行時に得られる値を比較して結果を出力するメソッドです。
代表的なものには以下のものがあります。
メソッド名 | 概要 |
assertEquals(オブジェクト, オブジェクト) | 2つのオブジェクトが等しくない場合にエラーを出力する |
assertNotEquals(オブジェクト, オブジェクト) | 2つのオブジェクトが等しい場合にエラーを出力する |
assertContains(要素 $needle, オブジェクト $haystack) | $needleが$haystackの要素でない場合にエラーを出力する |
assertNotContains(要素 $needle, オブジェクト $haystack) | $needleが$haystackの要素である場合にエラーを出力する |
assertType(型 $expected, 変数 $actual) | 変数$actualの型が$expectedでない場合にエラーを出力する |
assertNotType(型 $expected, 変数 $actual) | 変数$actualの型が$expectedである場合にエラーを出力する |
assertSame(オブジェクト, オブジェクト) | 2つのオブジェクトが同じオブジェクトを参照していない場合にエラーを出力する |
assertNotSame(オブジェクト, オブジェクト) | 2つの変数オブジェクトが同じ型・同じ値である場合にエラーを出力する |
その他のアサ―ションメソッドは非常に多いので詳細はマニュアルを参照してください。
テストの実行
テストの実行はphpunitコマンドで行います。
# phpunit UtilTest.php PHPUnit 3.4.13 by Sebastian Bergmann. . Time: 2 seconds, Memory: 4.25Mb OK (1 test, 3 assertions)
phpunitコマンドの主なオプションは以下のとおりです。
オプション | 概要 |
--log-junit ファイル名 | テスト結果ログをjunit形式で出力 |
--log-tap ファイル名 | テスト結果ログをtap形式で出力 |
--log-json ファイル名 | テスト結果ログをJSON形式で出力 |
--coverage-html ディレクトリ名 | コードカバレッジ解析の結果をHTML形式で出力 |
--coverage-clover ファイル名 | コードカバレッジ解析の結果をXML形式で出力 |
--skeleton-class | テスト用クラスからテスト対象クラスを生成 |
--skeleton-test | テスト対象クラスからテスト用クラスを生成 |
--stop-on-failure | エラーが起きた時点でテストを中断 |
エラーなくテストが実行された場合に「.」が表示されます。
testGetGoogleMapAddress()メソッド内の3つのテストを実行して結果が正しかったことが分かります。