@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. Хз, все зависит от логики приложения
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы