somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【symfony】limeでDBテスト

DBに関するテストを行う習慣をつけるために、簡単に設定できるlimeで感覚をつかもうと思いました。

単体テスト

単体テストを行うためには、下記の設定が必要です。

<?php

include_once(dirname(__FILE__) . '/../bootstrap/unit.php');

require_once($sf_symfony_lib_dir . '/util/sfCore.class.php');


$app_name = 'frontend';
sfCore::initSimpleAutoload(array(
  $sf_symfony_lib_dir,
  SF_ROOT_DIR . '/lib',
  SF_ROOT_DIR . '/apps/' . $app_name .'/lib',
  SF_ROOT_DIR . '/plugins',
));


set_include_path(
  $sf_symfony_lib_dir . '/vendor' . PATH_SEPARATOR
. SF_ROOT_DIR . PATH_SEPARATOR
. get_include_path()
);


define('SF_ENVIRONMENT', 'test');
define('SF_APP',         $app_name);
define('SF_DEBUG',       true);


sfCore::bootstrap($sf_symfony_lib_dir, $sf_symfony_data_dir);
sfContext::getInstance();
Propel::setConfiguration(sfPropelDatabase::getConfiguration());
Propel::initialize();


$test = new lime_test(1, new lime_output_color());
$list = ListPeer::doSelect(new Criteria());
$test->ok(count($list) > 0, 'project count is 0 over.');

まず、symfonyのコアクラスを読み込んでいます。次に、使用するライブラリのオートロード設定をしています。今回読み込んでいるのは、以下の4つです。

  • symfonyのライブラリ
  • root直下のライブラリ(モデルなど)
  • アプリケーションのライブラリ
  • プラグイン

これにより、ほぼ必要なものが揃いました。

あとは、パス・アプリケーション環境設定をします。その後、初期化処理を行うことでDBにアクセスできるようになります。テスト内容は、doSelectメソッドで取得した内容が存在することです。

機能テスト

機能テストでデータベースを扱うためには以下の設定が必要だそうです。

sfContext::getInstance();
Propel::setConfiguration(sfPropelDatabase::getConfiguration()); // 必要ないかも?
Propel::initialize(); // 必要ないかも?

単体テストと比べて設定が少ない理由は、bootstrap/functional.phpで、以下を行っているためです。

  • アプリケーション環境設定
  • アプリケーションの設定読み込み

アプリケーションの設定読み込みで行っている内容は、以下のとおりです。

  • コアクラスの読み込み
  • コアクラスの初期化(設定の設定と、パス設定)

機能テストはともかく、単体テストでDBを触れるようになったことはとても大きいです。