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

可以使用动态加载的扩展库运行PHPUnit吗?,php,phpunit,php-extension,Php,Phpunit,Php Extension,我有一套用于扩展的PHPUnit测试,我想将它们作为扩展的Hudson构建过程的一部分来运行 因此,我想运行PHPUnit,指定要在运行时加载的扩展库,但我不知道如何做到这一点 我的目录结构如下: /myextension.c /otherextensionfiles.* /modules/myextension.so /tests/unittests.php <phpunit> <php> <ini name="extension_dir" value="../

我有一套用于扩展的PHPUnit测试,我想将它们作为扩展的Hudson构建过程的一部分来运行

因此,我想运行PHPUnit,指定要在运行时加载的扩展库,但我不知道如何做到这一点

我的目录结构如下:

/myextension.c
/otherextensionfiles.*
/modules/myextension.so
/tests/unittests.php
<phpunit>
<php>
<ini name="extension_dir" value="../modules/"/>
<ini name="extension" value="myextension.so"/>
</php>
</phpunit>
我已尝试使用以下文件运行PHPUnit:

/myextension.c
/otherextensionfiles.*
/modules/myextension.so
/tests/unittests.php
<phpunit>
<php>
<ini name="extension_dir" value="../modules/"/>
<ini name="extension" value="myextension.so"/>
</php>
</phpunit>
但是我得到了一个致命错误:调用未定义的函数myfunction(),所以它没有加载库

我也试过:

phpunit -d extension_dir=../modules/ -d extension=myextension.so unittests.php 
还有
dl('myextension.so')
到测试设置,但没有乐趣

如果相关,则使用PHP5.2和PHPUnit 3.4.11


我已经交叉发布了。

我怀疑无法在运行时在PHPUnit中设置,因为它具有PHP\u INI\u SYSTEM属性

这意味着不可能使用它,因此我假设也不可能使用PHPUnit config设置它

编辑: 然而,由于PHPUnit只是另一个PHP脚本,因此可以直接运行PHP,并以这种方式传递覆盖命令

这解决了上述问题,并进行了以下工作:

php -d extension_dir=../modules -d extension=myextension.so /usr/bin/phpunit unittests.php

这种方法的唯一问题是PHPUnit将无法再找到安装在普通目录中的任何扩展(例如
/usr/lib/php5/20060613/
),这可以通过将扩展目录中的符号链接添加到默认扩展目录中的相关文件来解决。

Hmm。我的直觉是测试的
setup
方法中的
dl()
。。。但你是说那不管用。您是否可以使用
extension\u loaded
测试是否加载了扩展?你100%确定没有收到任何与加载扩展相关的错误吗?@Pekka-我想如果扩展在正常的
扩展目录下,那么
dl()
可以工作,但是除非我在Hudson构建过程中乱弄文件权限,否则我不能把它放在那里。啊,我明白了,废话,我想
dl()
可以接受任何路径。“我错了。@因此,在运行时,
dl()
将模块复制到扩展目录中,然后(可能)在测试的
tearDown
方法中将其删除(发抖)怎么样?非常笨拙,但缺少更好的方法……@Pekka,是的,这就是我在考虑的。@Pekka-我找到了一个解决方案,见上文。