是否可以使用动态加载的扩展库运行PHPUnit?

时间:2010-04-23 16:45:51

标签: php phpunit php-extension

我的扩展程序有一套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。

我已经交叉发布了this question on the PHPUnit users mailing list

1 个答案:

答案 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中的相关文件。