【问题标题】:Unit testing Doctrine objects with PHPUnit使用 PHPUnit 对 Doctrine 对象进行单元测试
【发布时间】:2023-03-06 20:21:01
【问题描述】:

我开始尝试使用 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 连接的示例。

【问题讨论】:

    标签: php doctrine phpunit


    【解决方案1】:

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

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

    Doctrine::loadModels($path);
    Doctrine::createTablesFromArray(Doctrine::getLoadedModels());
    

    【讨论】:

      【解决方案2】:

      查看 Ocramius 的 Gist,它表明您可以使用数据夹具进行测试:https://gist.github.com/Ocramius/3994325

      【讨论】:

        猜你喜欢
        • 2013-09-13
        • 1970-01-01
        • 2011-06-06
        • 2012-03-26
        • 1970-01-01
        • 2014-12-25
        • 2012-02-26
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多