1

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

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

我的目录结构如下:

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

我尝试使用配置 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。

我已经在 PHPUnit users mailing list 上交叉发布了这个问题

4

1 回答 1

3

我怀疑在 PHPUnit 中无法extension_dir在运行时设置,因为它在此图表中具有 PHP_INI_SYSTEM 属性。

这意味着它是不可能的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 中的相关文件来解决。

于 2010-04-24T11:28:38.903 回答