4

我开始尝试使用 PHPUnit 测试我的 Doctrine 对象,并且希望每次都从我的模型对象中重新加载数据库。

我的第一次尝试看起来像这样:

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();

    }

}

问题是当第二次测试再次调用 setUp() 时, createTablesFromModels() 失败,所以我收到一个错误,因为没有表存在。

我非常感谢其他人如何为 PHPUnit 或其他单元测试目的重新初始化 Doctrine 连接的示例。

4

2 回答 2

1

所以事实证明 createTablesFromModels 包含文件,然后比较之前和之后定义的类的列表,这就是为什么它不能工作两次。

重复时,类似以下的序列有效:

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 回答