【问题标题】:PHPUnit reuse PDO connectionPHPUnit 复用 PDO 连接
【发布时间】:2013-09-21 11:52:46
【问题描述】:

我已经研究了几个小时,但我找不到在多个单元测试中回收单个 PDO 连接 (MySQL) 的方法。有这种动物吗?

似乎我应该在引导程序中以某种方式声明它,但 PDO 连接无法序列化,因此测试中断。

我想针对很多表中的架构测试数据集,所以我不想每次都为新连接访问数据库。

【问题讨论】:

    标签: php mysql pdo phpunit persistent-connection


    【解决方案1】:

    我的简短回答是:不要,只需在测试您的 DB 相关代码的类中创建一个连接。
    另一种选择是创建一个静态setUpBeforeClass,将连接分配给另一个静态属性:

    public static function setUpBeforeClass()
    {
        self::$connection = new \PDO($dsn, $usr, $pwd, array());
    }
    

    这是一种有效的方法,您在挖掘the documentation 时应该会遇到这种方法。当然,由于连接是静态,它可以从全局范围访问,最好手动关闭。这是使用tearDownAfterClass 方法完成的(同样,public static 是必需的):

    public static function tearDownAfterClass()
    {
        self::$connection->rollBack();//? if required
        self::$connection = null;
    }
    

    将这些方法视为构造函数和析构函数。它们的签名必须public static,因为它们是通过反射调用的。

    【讨论】:

    • 是的,我确实遇到过...试图避免静态访问和单例模式。感谢您的意见。
    • 这不是单例模式,并且静态在你的单元测试中不会使测试更难:它是测试的一部分。这是共享固定装置的方式。我已经使用它作为抽象类的一部分,并且所有子类都从这里扩展。我也讨厌使用静态,但在这种情况下,这是最简单的方法
    猜你喜欢
    • 2015-11-01
    • 2013-05-29
    • 2011-07-22
    • 2014-10-28
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多