Home > PHP | 開発環境 > PHPUnitでMockオブジェクトを使う

PHPUnitでMockオブジェクトを使う

この記事の所要時間: 347

PHPUnit3がリリースされました。このバージョンにはMockがサポートされているのですが、PHPUnit3はPHP5を対象としているので残念ながらPHP4では動作しません。ですのでPHP4対応のPHPUnitでMockクラスを使う方法を探ってみました。

使うのはPHPUnitと並ぶユニットテストツールのSimpleTestです。こちらはPHP4対応でMockクラスがサポートされています。これをPHPUnitと組み合わせて使ってみます。

SimpleTestインストール

PEARパッケージが以前はあったようなのですが、sourceforgeにはそれらしいものが見当たりませんでした。
zuzara : symfonyチュートリアル実践【第14~16日目】を参考に以下のコマンドでインストールしました。

$ pear install http://jaist.dl.sourceforge.net/sourceforge/simpletest/simpletest_1.0.0.tgz

PEARパッケージが見つからない場合でもsourceforgeからソースを取得してinclude_pathで参照できる位置に配置すればOKです。

PHPUnit用Mockクラス

SimpleTestのSimpleMockを継承してPHPUnitで使うMockクラスを記述します。

< ?php
require_once 'simpletest/mock_objects.php';

class PHPUnitMock extends SimpleMock {
  function PHPUnitMock($test, $wildcard) {
    $this->SimpleMock($test, $wildcard);
  }
}
SimpleTestOptions::setMockBaseClass('PHPUnitMock');
?>

テスト対象クラス

テスト対象のクラスはこちらです。selectCount()はテーブル名を引数に取り、テーブルのレコード数を整数で返します。擬似的に処理時間が100秒かかるようにしています。

< ?php
class Database {
  function selectCount($table) {
    sleep(100);
    return null;
  }
}
?>

テストケース

Databaseクラスのテストケースを記述します。Mockクラスを使用することに定義した処理結果[100]がすぐに返ってきます。

< ?php
require_once 'PHPUnit.php';
require_once 'PHPUnitMock.php';
require_once 'Database.php';

Mock::generate('Database');

class DatabaseTest extends PHPUnit_TestCase {
  function DatabaseTest ($name) {
    $this->PHPUnit_TestCase($name);
  }

  function setup() {
  }

  function testQuery() {
    $mock =& new MockDatabase($this);
    $mock->setReturnValue('selectCount', 100, 'users');

    $ret = $mock->selectCount('users');
    $this->assertEquals($ret, 100);
  }
}

$suite = new PHPUnit_TestSuite('DatabaseTest');
$result = PHPUnit::run($suite);
echo $result->toString();
?>

SimpleTestはMockクラスの他にHTTPテストも行えるなど高機能なのですが、すでにPHPUnitを使用していたので今更移行するのも億劫でした。あとはコードカバレッジも使えると良いのですが。;-)

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2006/11/php_phpunit_mock.html/trackback
Listed below are links to weblogs that reference
PHPUnitでMockオブジェクトを使う from Shin x blog

Home > PHP | 開発環境 > PHPUnitでMockオブジェクトを使う

検索
フィード
メタ情報

Return to page top