gpt4 book ai didi

PHPUnit 和 MySQL 截断错误

转载 作者:IT老高 更新时间:2023-10-29 00:05:58 27 4
gpt4 key购买 nike

我对 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com