4

私は Doctrine オブジェクトを PHPUnit でテストしようと試み始めており、毎回モデル オブジェクトから DB を再ロードしたいと考えています。

私の最初の試みは次のようになります。

class Tests_User extends PHPUnit_Framework_TestCase
{

    public function setUp()
    {

        Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');

        Doctrine::createDatabases();
        Doctrine::createTablesFromModels('../../application/models');

    }

    public function testSavingWorks()
    {

        $user = new User();
        $user->save();

    }

    public function testSavingWorksAgain()
    {

        $user = new User();
        $user->save();

    }

    public function tearDown()
    {

        Doctrine::dropDatabases();

    }

}

問題は、2 番目のテストで setUp() が再度呼び出されると、createTablesFromModels() が失敗し、テーブルが存在しないためにエラーが発生することです。

他の誰かが PHPUnit やその他の単体テストの目的で Doctrine 接続を再初期化した例を教えていただければ幸いです。

4

2 に答える 2

1

そのため、createTablesFromModels はファイルをインクルードし、前後に定義されたクラスのリストを比較することがわかりました。これが、2 回機能しない理由です。

繰り返されると、次のようなシーケンスが機能します。

Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());
于 2008-11-18T21:12:28.333 に答える
1

データ フィクスチャを使用してテストできることを示す Ocramius の Gist を確認してください: https://gist.github.com/Ocramius/3994325

于 2013-10-26T10:24:56.750 に答える