У меня есть комплект тестов PHPUnit для моего расширения, и я хочу выполнить их как часть Гудзонского процесса сборки расширения.
Таким образом, я хочу выполнить PHPUnit определение дополнительной библиотеки для загрузки во времени выполнения, но я не могу выяснить, как сделать это.
Моя структура каталогов следующие:
/myextension.c
/otherextensionfiles.*
/modules/myextension.so
/tests/unittests.php
Я попытался выполнить PHPUnit с XML-файлом конфигурации следующим образом:
И затем выполняя его следующим образом (от tests
каталог):
phpunit --configuration config.xml unittests.php
Но затем я добираюсь Fatal error: Call to undefined function myfunction()
, таким образом, это не загружает библиотеку.
Я также попробовал:
phpunit -d extension_dir=../modules/ -d extension=myextension.so unittests.php
И также dl('myextension.so')
к тестовой установке, но никакой радости.
Если это релевантно, это использует PHP 5.2 и PHPUnit 3.4.11.
Я осуществил кросспостинг этого вопроса в пользовательском списке рассылки PHPUnit.
Я подозреваю, что невозможно установить extension_dir
во время выполнения в PHPUnit, поскольку он имеет атрибут PHP_INI_SYSTEM на этой диаграмме .
Это означает, что это невозможно с помощью ini_set ()
, поэтому я предполагаю, что также невозможно установить его с помощью конфигурации PHPUnit
.
Однако, поскольку PHPUnit - это просто еще один сценарий PHP, можно запустить PHP напрямую и таким образом передать команды переопределения!
Это позволяет обойти указанную выше проблему, и следующее работает:
php -d extension_dir=../modules -d extension=myextension.so /usr/bin/phpunit unittests.php
Единственная проблема с этим подходом заключается в том, что PHPUnit больше не сможет найти какие-либо расширения, которые были установлены в обычном каталоге (например, / usr / lib / php5 / 20060613 /
), это можно решить, добавив символические ссылки из вашего extension_dir на соответствующие файлы в extension_dir по умолчанию.