lime.phpを使ってPHPプログラムのテスト

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.                                     
同じタグの記事: PHP
同じカテゴリの記事: Program
関連書籍: PHP