PHPUnit 和 MySQL 截断错误

标签 php mysql phpunit

我对 PHPUnit 在插入夹具之前总是运行 TRUNCATE 的行为感到头疼没有首先设置外键检查:

语法错误或访问冲突:1701 无法截断外键约束中引用的表

基本上,PHPUnit 会在插入固定装置之前尝试截断表格。我如何告诉它 SET FOREIGN_KEY_CHECKS=0;

最佳答案

我似乎找到了答案。我最终通过扩展类覆盖了一些方法。

<?php

/**
 * Disables foreign key checks temporarily.
 */
class TruncateOperation extends \PHPUnit_Extensions_Database_Operation_Truncate
{
    public function execute(\PHPUnit_Extensions_Database_DB_IDatabaseConnection $connection, \PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet)
    {
        $connection->getConnection()->query("SET foreign_key_checks = 0");
        parent::execute($connection, $dataSet);
        $connection->getConnection()->query("SET foreign_key_checks = 1");
    }
}

然后示例用法:

class FooTest extends \PHPUnit_Extensions_Database_TestCase
{
    public function getSetUpOperation()
    {
        $cascadeTruncates = true; // If you want cascading truncates, false otherwise. If unsure choose false.

        return new \PHPUnit_Extensions_Database_Operation_Composite(array(
            new TruncateOperation($cascadeTruncates),
            \PHPUnit_Extensions_Database_Operation_Factory::INSERT()
        ));
    }
}

所以我有效地禁用了外键检查并将它们设置回来(如果它们曾经设置过)。显然,您应该创建一个具有此功能的基类并扩展它,而不是 PHPUnit 的 TestCase。

关于PHPUnit 和 MySQL 截断错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331445/

相关文章:

php - paypal IPN 不向 mysql 添加数据?

php - ODBC 未连接 HTML/PHP

javascript 计时器显示自下订单以来的时间滴答

php - WordPress 未在本地环境中运行,为 Google 应用引擎开发

Phpunit-Selenium 运行所有断言函数

php - 关于 PHPUnit 模拟功能的问题

php - 如何使用 PHPUnit 模拟 SimpleXMLElement 对象?

PHP 似乎正在向后评估 if 语句

php - 如何将大量数据以一个值传输到 MySQL 服务器?

php - 正则表达式可选组和数字长度