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')、テストのセットアップにも、喜びはありません。

関連する場合、これはPHP5.2およびPHPUnit3.4.11を使用しています。

この質問をPHPUnitユーザーのメーリングリストにクロスポストしました。

4

1 に答える 1

3

このチャートでextension_dirはPHP_INI_SYSTEM属性を持っているため、実行時にPHPUnitで設定することはできないと思います。

つまりini_set()、で設定することはできないので、PHPUnitconfigで設定することもできないと思い<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 に答える