ユニットテスト用の設定

ユニットテストが外部のサービス (データベースや LDAP サーバ、あるいは企業のウェブサービスなど) に依存することもしばしばあります。 これらのサービスにアクセスするには認証情報が必要となります。 ユーザ名とパスワードの組み合わせや API キーなどです。

こういった機密情報は一般に公開するものではありませんし、 ユニットテスト内にそんな情報を含めてはいけません。 そのかわりに、設定ファイルのテンプレートである config.php.dist を同梱するようにしましょう。 テストを実行するユーザは、このファイルのコピーを作成して config.php という名前で保存し、内容を調整します。

例 24-4ディレクトリ構成の例

tests/
    config.php.dist
    config.php

例 24-5設定テンプレートの例


<?php
$GLOBALS['My_Package_UnittestConfig'] = array(
    'host'     => 'FIXME',
    'username' => 'FIXME',
    'password' => 'FIXME',
    'host'     => 'FIXME',
);
?>

設定ファイルが見つからない場合でも、die() するのではなくユニットテストを続行させなければなりません。 これは、複数のパッケージをまとめて一度にテストする際などに重要となります。

設定ファイルが存在するかどうかは、まず最初にチェックしなければなりません。

例 24-6設定ファイルが存在するかどうかのチェック


<?php
//...

class My_Package_ClassTest extends PHPUnit_Framework_TestCase
{
    protected $configExists null;

    //...

    public function __construct($name null)
    {
        parent::__construct($name);

        $configFile dirname(__FILE__) . '/config.php';
        $this->configExists file_exists($configFile);
        if ($this->configExists) {
            include_once $configFile;
        }
    }

    //...

    public function setUp()
    {
        if (!$this->configExists) {
            $this->markTestSkipped('Unit test configuration is missing.');
        }
        //...
    }

    //...
}
?>