gpt4 book ai didi

php - 如何开始和回滚数据库事务以包装用于 Magento 的 PHPUnit 套件

转载 作者:可可西里 更新时间:2023-11-01 01:09:28 25 4
gpt4 key购买 nike

我想使用事务回滚方法来隔离我的数据库以进行单元测试。理想情况下,我会使用这样的结构:

public static function setUpBeforeClass(){
Mage_Core_Model_Resource_Transaction::beginTransaction();
}

public function testOne(){...}
public function testTwo(){...}

public static function tearDownAfterClass(){
Mage_Core_Model_Resource_Transaction::rollBack();
}

不幸的是,Mage_Core_Model_Resource_Transaction 类没有公开公共(public) begin/rollbackTransaction 函数。我找不到满足要求的任何公共(public) Magento 函数。是否有可用的 Zend 等价物?

我想我可以重写 Mage_Core_Model_Resource_Transaction 并为 protected 方法添加公共(public)包装器,但我对覆盖这样的核心类犹豫不决。

我也试过用

$this->model = Mage::getModel('model_being_tested');
$this->model->getResource()->beginTransaction();
...
$this->model->getResource()->rollBack();

然后在测试中使用 $this->model 但不能在静态函数中使用。

有什么建议或替代架构吗?提前致谢。

最佳答案

坦率地说,我将为 Magento 创建某种测试套件,以便在您的模块中编写测试用例而无需处理初始化等。当然,由于项目的原因,我没有足够的时间,但我想分享我将要使用的考虑数据库装置的想法。我想到了为单元测试创​​建一个单独的数据库(从当前的测试用例复制而来),因为每个测试用例都会通过 fixture 为其加载初始数据。数据库连接凭证将在 Mage::app()->run() 之前设置,因此可以保护您的开发副本免受单元测试可能发生的更改。

你不能依赖事务,尤其是在保存产品的情况下......设置了一个用于启动重新索引过程的提交回调,如果你没有将数据提交到产品表,它可能会导致不可预测的结果。在这种情况下,mysql 服务器也可能消失,特别是如果您有一个大型数据库。

更新:

它的扩展名: http://www.ecomdev.org/2011/02/01/phpunit-and-magento-yes-you-can.html

关于php - 如何开始和回滚数据库事务以包装用于 Magento 的 PHPUnit 套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455919/

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