仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

データベースの設定が混在している環境のテストケース

デフォルトのデータベースとして「MySQLのデータベースその1」を利用して、「MySQLのデータベースその2」や「Oracleのデータベース」なども混在して利用するという開発環境での話し。
この環境でデフォルトではない「Oracleのデータベース」を利用するモデルのテストケースを作っていて、うまいことfixtureからテスト用のテーブルができてくれないので悩んだ。
ちゃんと確認していないけど、デフォルトのデータベース接続「default」設定をもとにテスト用のデータベース接続「test_suite」を作成するから、デフォルトの「MySQLのデータベースその1」の接続が「Oracleのデータベース」のfixtureやテストケースにも利用されているっぽい?
fixtureやテストケースの設定次第でどうにかなりそうだったけど、しばらくソースコードをながめて上手な解決策が思い浮かばなかったので、強引にテストケースで処理を上書きすることで解決しちゃいました。

こんな感じで、それなりにテストケースが動いたので、たぶん問題ないのかな、と……。

class FooTestCase extends CakeTestCase
{

    public $fixtures = array('app.oracle_hoge');

    public function start() {
        $this->db = ConnectionManager::getDataSource('oracle');
        $this->db->config['prefix'] = 'test_suite_';
        $this->_fixtures['app.hoge']->table = 'hoge';

        $Hoge = ClassRegistry::init('hoge');
        /* TestSuite */ {
            $Hoge->tablePrefix = 'test_suite_';
        }

        parent::start();
    }

fixtureのtableプロパティを書き換えているのは、テスト対象のテーブルが複合主キーだから、モデルのuseTableプロパティをfalseにしてゴニョゴニョ……管理上の問題でモデル名が規約違反だったり……なモデルだからなので、たぶん本来であれば必要ないのでは?