Задать вопрос
@myzerov

Можно ли научить PHPUnit понимать классы dynamic extension'ов?

Привет!
Допустим, я полный профан в теме автоматического тестирования.
Допустим, я поставил PHPUnit.
У меня есть класс

class Main {
public $tnt;
public function __construct() {
//тут я включаю автозагрузку
spl_autoload_register<...>;
//а затем... создаю инстанс нужной мне приблуды (в данном случае это Tarantool от mail.ru)
$this->tnt = Tarantool("localhost", "port_number");
}
}

Я поясню: класс Tarantool берется из dynamic extension'а "tarantool-php", созданного для работы с этой NoSQL базой данных из php. Модуль представляет собой обычный .so-файл, собранный из исходников и подкинутый php.

Когда я запуская тест, который создает инстанс Main-класса, то получаю следующую ошибку:
"PHP Fatal error: {closure}(): Failed opening required '/var/www/gameserver/Tarantool.php' (include_path='/usr/lib/php5/') in /var/www/gameserver/app/Main.php on line xxx"

PHPUnit я запуская просто так, без каких-то bootstrap'ов, без конфигураций, без ничего.
PHPUnit, как я понимаю, думает, что я хочу загрузить класс Tarantool автолоадом из папки /var/www/gameserver/, но класс Tarantool доступен мне без автолоада, благодаря тому что у меня поставлен extension, предоставляющий его.

Вопросы:
1. Я чего-то не понимаю в организации тестирования с помощью PHPUnit и мне нужно использовать вместо реального класса Tarantool из экстеншена какой-то свой mock?
2. Если я могу использовать классы dynamic extension'ов, то как мне дать PHPUnit'у понять, откуда их подгружать? Как-то указать путь к экстеншену?
3. Может вообще неправильно использовать автолоад внутри тестируемых классов? Или как?

Спасибо.
  • Вопрос задан
  • 2369 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
nonlux
@nonlux
1. Да я бы мокнул ), но для этого конструктор надо поменять.
2. Думаю тут ноги пляшут от настроек PHP.
Посмотрите в каком окружении работает ваш (php.ini) Main и в каком работает phpunit.
Если мои телепатические способности не подводят. То ваш Main работает с веб-окружением ( php-fpm или cgi и т.д.), а phpunit работает через php-cli. Вся разница в используемом php.ini
И скорее всего во втором не подключено ваше расширение
3. Хз, все зависит от логики приложения
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽