PHPのユニットテスト用ライブラリとしては、PHPUnitが有名ですが、symfonyにはlime.phpというPHPプログラムをテストするためのライブラリが付属しています。ということで簡単に調べてみました。
lime.phpは、symfony-1.4.20.tgz を展開した場合は、 symfony-1.4.20/lib/vendor/lime/lime.php にあります。symfony-1.4.20.tgz の入手方法は「symfony1.4を使ってみる | hiro345」にあるように、http://pear.symfony-project.com//get/symfony-1.4.20.tgz からダウンロードができます。
試しに使ってみるだけなので、専用ディレクトリを用意し、次のようなファイルを用意します。lime.phpはsymfony1.4から持ってくるとして、他のファイルは自分で作成します。
lime ├── UserInfo.php ├── UserInfoTest.php ├── lime.php ├── sample_test1.php └── sample_test2.php
最初のテストコード sample_test1.php は、文字列かどうかチェックするテストです。$sに1を代入しているためテストが失敗します。ちなみに、PHPだけのファイルなので、最後の「?>」は省略をしています。テストプログラムなので、「?>」はあってもかまいません。このあたりは好みです。
<?php require_once('lime.php'); $t = new lime_test(null, new lime_output_color()); $s = 1; $t->ok(is_string($s));
ここではわかりませんが、lime_output_colorを使っているため、コンソールでは赤色のバーが表示されて失敗したことがわかるようになっています。
$ php sample_test1.php not ok 1 # Failed test (./sample_test1.php at line 6) 1..1 # Looks like you failed 1 tests of 1.
次のsample_test2.phpでは、正しく文字列「hello」を$sへ代入しています。
<?php require_once('lime.php'); $t = new lime_test(null, new lime_output_color()); $s = "hello"; $t->ok(is_string($s));
こちらは成功します。緑色のバーが表示されて、成功したことがわかります。
$ php sample_test2.php ok 1 1..1 # Looks like everything went fine.
もう少し複雑な例を試すために、UserInfo.phpを用意してみました。作成途中のものなのでactiveかどうかを保持するプロパティと、その値を返却するisActiveメソッドしかありません。
<?php class UserInfo { private $active = false; public function isActive() { return $this->active; } }
このUserInfo.phpをテストするUserInfoTest.phpは次のようになります。
<?php require_once('lime.php'); require_once 'UserInfo.php'; $t = new lime_test(null, new lime_output_color); $t->diag('Test for UserInfo'); $userInfo = new UserInfo(); $active = $userInfo->isActive(); $expected = false; $t->is($active, $expected, 'isActiveの初期値はfalse');
このテストプログラムは「isActiveの初期値はfalse」であることを確認しています。正しく実装済みなので、成功します。
$ php UserInfoTest.php # Test for UserInfo ok 1 - isActiveの初期値はfalse 1..1 # Looks like everything went fine.