myproject
|
+--test
|
+--- bootstrap
|
+--- functional
| |
| +---- hogeActons.php
|
+--- unit
上記のように、init-moduleで作成したモジュール用テストがfunctionalへ、ユニットテスト用コードはunit以下へ配置されます。(bootstrapはlime読み込みなどの初期設定を行うphpがあります。)unit以下へ○○Test.phpと書くと、以下のコマンドでテストが開始されます。
例) hogeTest.php
symfony test-unit hoge
また、
symfony test-unit
このように対象とするテストを指定しない場合、unitディレクトリ以下の**Test.phpが順に自動的に実行されます。
テストする場合、どうしても面倒なのがパラメータの指定ですが、symfonyのポリシーに従ってYAMLで設定することもできるので、とても重宝しています。
例として、暗号化を行った際のテストです。
<?php
// encryptTest.php
defined('SF_APP') || define('SF_APP', 'myapp');
defined('SF_ENVIRONMENT') || define('SF_ENVIRONMENT', 'test');
defined('SF_DEBUG') || define('SF_DEBUG', true);
require_once(dirname(__FILE__).'/../bootstrap/unit.php');
// テスト数を設定
$t = new lime_test(7, new lime_output_color());
$t->diag('Hoge::encrypt()');
// 暗号化クラス
class Hoge
{
public static function encrypt($src)
{
return md5((string)$src);
}
}
// 空クラス
class a
{
public function b()
{
}
}
$a = new a;
$t->can_ok(new Hoge, 'encrypt', 'Hogeオブジェクトのencryptメソッドは利用可能');
$t->is(Hoge::encrypt('a'), md5('a'), '暗号化アルゴリズムはMD5を使用');
$t->like(Hoge::encrypt('a'), '/^[a-f\d]{32}$/', 'MD5後は32文字の16進数');
$t->is(Hoge::encrypt(array(1)), md5((string)array(1)), '配列を渡した場合は型変換される');
$t->is(Hoge::encrypt($a), md5((string)$a), 'オブジェクトを渡した場合は型変換される');
$t->is(Hoge::encrypt(''), md5((string)''), '空文字列を渡しても大丈夫');
$t->is(Hoge::encrypt(false), md5((string)''), 'boolのfalseを渡しても空文字列にキャストされる');
出力は以下のようになります。
% symfony test-unit encrypt
1..7
# Hoge::encrypt()
ok 1 - Hogeオブジェクトのencryptメソッドは利用可能
ok 2 - 暗号化アルゴリズムはMD5を使用
ok 3 - MD5後は32文字の16進数
ok 4 - 配列を渡した場合は型変換される
ok 5 - オブジェクトを渡した場合は型変換される
ok 6 - 空文字列を渡しても大丈夫
ok 7 - boolのfalseを渡しても空文字列にキャストされる
Looks like everything went fine.
次回はもう少し掘り下げてlimeをご紹介します。