@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. Может вообще неправильно использовать автолоад внутри тестируемых классов? Или как?

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽