【发布时间】:2011-07-03 10:11:07
【问题描述】:
大家好,
我已经为“地址”表设置了版本控制行为,但是当我尝试运行 PHPUnit 测试时出现以下错误:
SQLSTATE[HY000]:一般错误:1205 超过锁定等待超时;尝试 重启交易
我的 testCase 上有 2 个“test*”方法。如果我只留下 1 那么它可以工作,如果 > 1 - 那么我会得到那个错误。
代码如下:
类 UserTest 扩展 DbTestCase {
protected $object;
protected function setUp()
{
// zf bootstrap here and doctrine connect
parent::setUp();
// clean/create tmp tables
$this->_prepareDB();
$this->object = new User;
}
public function testGetFullUsername()
{
$model = new User;
$model->email = $email . time();
...
$model->Supplier->Address->firstname = $first_name;
$model->Supplier->Address->lastname = $last_name;
...
$model->UserRight[0]->role = 'Supplier';
$model->UserRight[0]->resource = '*';
$model->UserRight[0]->privilege = '';
$model->save();
}
// it can be even the same
public function testRoles()
{
$model = new User;
$model->email = $email . time();
...
$model->Supplier->Address->firstname = $first_name;
$model->Supplier->Address->lastname = $last_name;
...
$model->UserRight[0]->role = 'Supplier';
$model->UserRight[0]->resource = '*';
$model->UserRight[0]->privilege = '';
$model->save();
}
}
当 PHPunit 运行第二种方法时,事务结束并开始另一个:
// 1st method
// thread id: 412
START TRANSACTION
INSERT INTO user (...) VALUES (...)
INSERT INTO address (...) VALUES ('...')
INSERT INTO address_version (...) VALUES (...)
INSERT INTO supplier (...) VALUES (...)
INSERT INTO user_right (...) VALUES (..)
commit
// 2nd method
// thread id: 413
START TRANSACTION
INSERT INTO user (...) VALUES (...)
INSERT INTO address (..) VALUES (...)
// then new thread created (server disconnects), id: 414
CONNECT xxxxx@localhost on xxxx__tmp_testing
START TRANSACTION
INSERT INTO address_version (...) VALUES (...)
rollback
rollback
它断开了连接,但我不知道为什么。如果我删除“版本化”行为 - 那么它会起作用!
你能帮帮我吗?我真的很喜欢它,不知道错误原因:(
感谢您的关注!
更新:
原因在于“版本化”插件。我们必须在 phpunit 测试中禁用它: $account->Distributor->Address->getListener()->setOption('disabled', true); 附加到“地址”模型的版本 它解决了问题。
【问题讨论】:
标签: zend-framework doctrine phpunit