【发布时间】:2013-09-21 11:52:46
【问题描述】:
我已经研究了几个小时,但我找不到在多个单元测试中回收单个 PDO 连接 (MySQL) 的方法。有这种动物吗?
似乎我应该在引导程序中以某种方式声明它,但 PDO 连接无法序列化,因此测试中断。
我想针对很多表中的架构测试数据集,所以我不想每次都为新连接访问数据库。
【问题讨论】:
标签: php mysql pdo phpunit persistent-connection
我已经研究了几个小时,但我找不到在多个单元测试中回收单个 PDO 连接 (MySQL) 的方法。有这种动物吗?
似乎我应该在引导程序中以某种方式声明它,但 PDO 连接无法序列化,因此测试中断。
我想针对很多表中的架构测试数据集,所以我不想每次都为新连接访问数据库。
【问题讨论】:
标签: php mysql pdo phpunit persistent-connection
我的简短回答是:不要,只需在测试您的 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,因为它们是通过反射调用的。
【讨论】: