Webtech Walker

symfonyのunitテストでちょっと楽する

symfonyのunitテストでデータの初期化とか定型のコード書くのが面倒だったので、データのロードとか初期化をいい感じにやってくれるクラスつくってみた。

<?php
// /path/to/symfony_root/test/bootstrap/myTest.php

require_once 'unit.php';

class MyTest {

  public $con;
  public $limeTest;

  public function __construct($plan = null) {
    $configuration = ProjectConfiguration::getApplicationConfiguration(
      'front', 'test', true);
    new sfDatabaseManager($configuration);

    $this->limeTest = new lime_test($plan);

    $this->con = Propel::getConnection();
    $this->con->beginTransaction();
  }

  public function loadData($file = null) {
    $fixture = sfConfig::get('sf_test_dir').'/fixtures';
    if ($file) {
      $fixture .= "/$file";
    }
    $loader = new sfPropelData();
    $loader->loadData($fixture);
  }

  public function __destruct() {
    $this->con->rollBack();
  }
}

実際テストするときはかんじに書く。

<?php

require_once dirname(__FILE__).'/../bootstrap/myTest.php';

$myTest = new MyTest(1);
$myTest->loadData();
$t = $myTest->limeTest;

$t->ok(1);

デストラクタでrollbackしてるのでテストが終わったらDBの状態を元に戻してくれるところがポイント。ただしInnoDBじゃないとダメです。

このエントリーをはてなブックマークに追加