我的扩展程序有一套PHPUnit测试,我希望将它们作为扩展程序的Hudson构建过程的一部分来运行。
所以我想运行PHPUnit,指定在运行时加载的扩展库,但我无法弄清楚如何做到这一点。
我的目录结构如下:
/myextension.c
/otherextensionfiles.*
/modules/myextension.so
/tests/unittests.php
我尝试使用configuration XML文件运行PHPUnit,如下所示:
<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。
答案 0 :(得分:2)
我怀疑在PHPUnit中无法在运行时设置extension_dir
,因为它具有PHP_INI_SYSTEM in this chart属性。
这意味着它不可能与ini_set()
一起使用,所以我认为也不可能使用PHPUnit config <ini name="extension_dir" value="/mydir/">
来设置它。
但是,由于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中的相关文件。