Можно ли запустить PHPUnit с динамически загружаемой библиотекой расширений? - PullRequest
1 голос
/ 23 апреля 2010

У меня есть набор тестов PHPUnit для моего расширения, и я хочу запустить их как часть процесса сборки расширения Hudson.

Поэтому я хочу запустить PHPUnit, указав библиотеку расширений для загрузки во время выполнения, но я не могу понять, как это сделать.

Моя структура каталогов выглядит следующим образом:

/myextension.c
/otherextensionfiles.*
/modules/myextension.so
/tests/unittests.php

Я попытался запустить PHPUnit с файлом конфигурации XML следующим образом:

<phpunit>
<php>
<ini name="extension_dir" value="../modules/"/>
<ini name="extension" value="myextension.so"/>
</php>
</phpunit>

И затем запустить его следующим образом (из каталога 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 .

1 Ответ

2 голосов
/ 24 апреля 2010

Я подозреваю, что невозможно установить extension_dir во время выполнения в PHPUnit, так как он имеет атрибут PHP_INI_SYSTEM в этой диаграмме .

Это означает, что это невозможно с ini_set(), поэтому я предполагаю, что также невозможно установить его с помощью конфигурации PHPUnit <ini name="extension_dir" value="/mydir/">.

EDIT:

Однако, поскольку 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.

...