Как начать и откатить транзакцию базы данных, чтобы обернуть пакет PHPUnit для Magento - PullRequest
3 голосов
/ 16 декабря 2010

Я бы хотел использовать метод отката транзакций, чтобы изолировать мою базу данных для целей модульного тестирования.В идеале я бы использовал такую ​​структуру:

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 не предоставляет общедоступных функций begin / rollbackTransaction.Я не могу найти какие-либо общедоступные функции Magento для удовлетворения требований.Есть ли эквивалент Zend, который будет работать?

Я думаю, я мог бы переписать Mage_Core_Model_Resource_Transaction и добавить общедоступные оболочки для защищенных методов, но я не решаюсь переопределить такой базовый класс.

Я также пытался использовать

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

, а затем использовать $this->model в тестах, но его нельзя использовать в статических функциях.

Есть предложения или альтернативные архитектуры?Заранее спасибо.

1 Ответ

4 голосов
/ 17 декабря 2010

Честно говоря, я собираюсь создать некоторый набор тестов для Magento, чтобы сделать возможным написание тестовых примеров в вашем модуле, не заботясь об инициализации и так далее. Конечно, у меня не хватает времени из-за проектов, но я хочу поделиться идеей, которую я собираюсь использовать, учитывая фиксации базы данных. Я придумал создать отдельную базу данных для модульных тестов (скопированных из текущего по тестовому сценарию), потому что каждый тестовый пример будет загружать исходные данные для него через приспособление. Учетные данные для подключения к базе данных будут установлены до Mage::app()->run(), поэтому можно будет защитить вашу копию разработки от возможных изменений с помощью модульных тестов.

Нельзя полагаться на транзакции, особенно в случае сохранения продукта ... Установлен обратный вызов коммита для запуска процесса повторной индексации, и это может привести к непредсказуемым результатам, если вы не зафиксировали данные в таблицах продуктов. В этом случае сервер mysql может исчезнуть, особенно если у вас большая база данных.

UPDATE:

Расширение для него: http://www.ecomdev.org/2011/02/01/phpunit-and-magento-yes-you-can.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...