webarchitect609 / bitrix-taxidermist
Mocking of Bitrix classes for Unit-testing.
Requires
- php: ^7.2 || ^8.0
- symfony/finder: ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^8.5
- roave/security-advisories: dev-master
README
Пожалуйста, будьте внимательны: это пока нестабильная альфа-версия!
Для разработки Unit-тестов библиотек, зависимых от Битрикс, требуется сам Битрикс. Однако его установка является долгим
процессом, который контролируется через визуальный интерфейс в браузере и очень сложно поддаётся автоматизации. Данная
библиотека предоставляет возможность автоматического создания имитаций(mocking) классов Битрикс без установки
последнего. Одновременно решается проблема Multiple definitions exist for class '%bitrixClassName%'
в IDE при
разработке.
Возможности
- Автоматическое создание mock-классов Битрикс для использование в Unit-тестах
Установка
composer require --dev webarchitect609/bitrix-taxidermist
Использование
Unit-тесты
При написании Unit-теста в переопределении метода \PHPUnit\Framework\TestCase::setUp()
или
\PHPUnit\Framework\TestCase::setUpBeforeClass()
следует запустить изготовление имитаций всех классов:
use WebArch\BitrixTaxidermist\Taxidermist; (new Taxidermist)->taxidermizeAll();
Будут автоматически созданы алиасы. Например,
/** @noinspection ALL */ class_alias('\WebArch\BitrixTaxidermist\Mock\Bitrix\Main\Data\Cache', '\Bitrix\Main\Data\Cache');
, и таким образом Unit-тест может пользоваться этими классами точно также, как если бы в его распоряжении был установленный Битрикс.
Статический анализ кода
Следует указать файл ~/resources/autoload-dist.php
в качестве дополнительного файла автозагрузчика.
Известные особенности
Ошибка при вызове \Bitrix\Main\Application::getInstance()
Если необходимо работать с \Bitrix\Main\Application::getInstance()
, он будет вызывать ошибку:
Error: Cannot instantiate abstract class WebArch\BitrixTaxidermist\Mock\Bitrix\Main\Application
Чтобы этого избежать, следует создать требуемый объект приложения. Например, так:
use WebArch\BitrixTaxidermist\Mock\Bitrix\Main\HttpApplication; HttpApplication::getInstance();