PHPUnit 重用 PDO 连接

标签 php mysql pdo phpunit persistent-connection

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

看来我应该在 Bootstrap 中以某种方式声明它,但 PDO 连接无法序列化,因此测试中断。

我想根据许多表中的模式测试数据集,因此我不想每次都访问数据库以建立新连接。

最佳答案

我的简短回答是:不要,只需在测试与数据库相关的代码的类中创建一个连接。
另一个选项是创建一个静态 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)静态,因为它们是通过反射调用的。

关于PHPUnit 重用 PDO 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18843129/

相关文章:

PHP - 将 PDO 与 IN 子句数组一起使用

php - 通过 PHP 解码数字 html 实体

php - 记录隐式输入参数,例如 $_SESSION

php - Doctrine 在 symfony 中找不到方法

php - 使用 PHP 多次查询 mysql 数据库的最有效方法是什么?

php - 如何在 codeigniter 中使用 img_library 调整多个图像的大小

php - 无法在 MAMP 本地主机上加载 PHP 文件

php - laravel 搜索以空格分隔的多个单词

php - 交易: commit() vs rollBack()

php - 用条件更新查询?