Установка
Оскільки Magento 1 не використовує композитора поза коробкою, я не думаю, що це має велике значення, якщо встановити phpunit за допомогою композитора або просто завантажити версію phar .
Якщо ви вже використовуєте композитор для управління іншими сторонніми модулями або бібліотеками на вашому сайті, то композитор, мабуть, має найбільше сенс. Якщо ви не використовуєте PHP7, ви будете обмежені старою версією phpunit (тому я пов’язав версію 4.8 вище).
Інтеграційні тести проти / та / або Тести одиниць
Оскільки Magento 1 є настільки важким додатком для ваги, є сенс розділити завантажувальний апарат phpunit на один для інтеграції та один для одиничних тестів.
Тестовий завантажувальний пристрій потрібно лише ініціалізувати автозавантажувач, тоді як тестовий завантажувальний пристрій інтеграції повинен ініціалізувати все середовище програми, включаючи завантаження конфігурації та з'єднання db.
Через те інтеграційні тести в Magento, як правило, працюють набагато повільніше, ніж одиничні тести (тим більше, що і в інших програмах).
Завантаження Magento на phpunit
Автозавантажувач Magento не відповідає стандарту PSR-0, оскільки він видає виняток, якщо він не може знайти файл, в якому знаходиться клас. Це порушує деякі звичаї class_exists
в phpunit. Є кілька можливих (якщо хакі) обхідних шляхів:
- Скасуйте реєстрацію автозавантажувача Magento, загорнувшись
\Varien_Autoload::autoload()
в декоратор, ігноруючи винятки, кинуті всередині, та зареєструйте обгортку як новий автонавантажувач. Це низька ймовірність конфлікту з сторонніми бібліотеками, які реєструють автозавантажувачі та залежать від конкретного замовлення автозавантажувача.
- Використовуйте користувальницький обробник помилок, загорнувши вбудований в Magento 1. Спеціальні обробники помилок ковтають помилки, викликані автозавантажувачем Magento. Це рішення, яке використовує тестова рамка Рафаеля . Це, мабуть, є найбільш сумісним з іншими розширеннями сторонніх розробників.
- Використовуйте hack path path для переосмислення,
\Varien_Autoload::autoload()
щоб не викинути помилку, якщо файл не існує. Однак це конфліктує з декількома модулями, які також перекривають один клас. Я сам не використовую такий підхід.
Щоб уникнути помилок із запуску сеансу під час тестів, просто встановіть $_SESSON = []
у завантажувальній програмі.
Встановіть спеціальний об'єкт відповіді, Mage::app()->setResponse($testResponse)
який розширює реальний, але не надсилає вихідні чи заголовки.
Для повторної ініціалізації Magento між інтеграційними тестами, які повністю змінюють стан виконання, використовуйте Mage::reset(); Mage::app()
. Зауважте, що після цього оброблювач помилок доведеться повторно прикрасити.
Світильники
Для світильників DB я, як правило, використовую звичайні моделі в методах кріплення для створення світильників, наприклад createSimpleProduct($sku)
. Як сказав Рафаель, використовуйте setUp()
та tearDown()
оберніть тест у транзакції, яка повертається після тесту (наприклад Mage::getSingleton('core/resource')->getConnection('default_setup')->beginTransaction()
).
Для пристосувань конфігурації магазину я, як правило, налаштовую лише світильники в пам'яті за допомогою Mage::app()->getStore()->setConfig($path, $value)
.
EcomDev_PHPUnit
Розширення також надає можливість для створення БД приладів з допомогою YAML файлів, але для себе я вважаю , тим важче підтримувати по порівнянні з сантехнікою , створеної з використанням моделі класів. YMMV.
Тест-пар
Реєстр можна використовувати для введення тестових пар для об’єктів, створених через Mage::getSingleton()
, Mage::getResourceSingleton()
та Mage::helper()
.
Можна встановити деякі інші центральні об'єкти Mage::app()
(наприклад, запит).
Для заміни класів, створених за допомогою тестових пар, Mage::getModel()
або за Mage::getResourceModel()
допомогою тестових пар, слід використовувати спеціальну обгортку об'єкта конфігурації . Дивіться цей приклад у тестовій рамці Рафаеля, як це можна досягти.
Підсумок
Після того, як Magento завантажується, майже все можна перевірити досить добре. Будьте готові створити глибокі макети через велику кількість методів, що ланцюжок основного коду використовує, хоча.
Незважаючи на те, що налаштування хакі, воно працює добре, і я вважаю, що тести дають мені велику впевненість і цінність, майже в порівнянні з тестовим набором для програми Symphony.