コードやテストを変更したら自動で PHPUnit を実行する

指定したフォルダの変更を監視して、変更検出時にテストを自動的に実行してくれるという便利なツール「Stagehand_TestRunner」がありましたので、インストールして CIUnit で使ってみました。

Stagehand_TestRunner のインストール

$ sudo pear channel-discover pear.piece-framework.com
$ sudo pear install piece/stagehand_testrunner
$ sudo pear install Console_Color

テストの実行

テストフォルダに移動し、phpunitrunner コマンドを実行します。

1つのテストの実行

オプションで PHPUnitXML ファイルを指定します。-c オプションは出力に色を付ける、-v オプションは詳細な進捗リポートの出力です。

1つのテストを実行する場合は、最後にテストファイルを指定します。

$ cd my-ci-ja/tests
$ phpunitrunner --phpunit-config=phpunit.xml -cv models/PhoneCarrierModelTest.php
指定フォルダ以下のテストの実行

指定フォルダ以下のすべてのテストを実行するには -R オプションを付け、最後にフォルダを指定します。

$ phpunitrunner --phpunit-config=phpunit.xml -cR .


フォルダを監視してテストを自動実行

フォルダを指定して、変更を監視し、自動でテストを実行するには -a オプションを指定します。

$ phpunitrunner --phpunit-config=phpunit.xml -a .

これで、tests フォルダにあるテストファイルを変更してみると、テストが自動的に実行されます。

ところが、CIUnit_TestCase クラスが見つからないという Fatal error で動作しません。

PHP Fatal error: Class 'CIUnit_TestCase' not found in /home/kenji/workspace/my-ci-ja/tests/controllers/SomeControllerTest.php on line 8

それでは、-p オプションで CIUnit の bootstrap ファイルを指定してみましょう。

$ phpunitrunner --phpunit-config=phpunit.xml -p ../application/third_party/CIUnit/bootstrap_phpunit.php -ac .

(2011/07/28 追記) 上記の --phpunit-config オプションが有効にならないバグは、Stagehand_TestRunner 2.18.0 で修正されました。しかし、今度は、

ERROR: The directory or file [ -R ] is not found

というエラーが発生するようになりました。このエラーは、phpunitrunner コマンドを直接実行する場合に発生するとのことで、以下のように php コマンドから実行することで回避できます。

$ php /opt/lampp/bin/phpunitrunner --phpunit-config=phpunit.xml -a .

上記でうまく動作しました。

Stagehand_TestRunner 2.18.1 で上記のバグも修正されました。


テストファイルだけでなく、アプリケーションのソースを変更した場合にもテストを自動実行するためには -w オプションで監視対象のフォルダを指定します。

$ phpunitrunner --phpunit-config=phpunit.xml -p ../application/third_party/CIUnit/bootstrap_phpunit.php -ac -w ../application .

これで application フォルダの中のファイルを変更してもテストが実行されるようになりました。しかし、一度実行されると 5秒置きにずっとテストが実行されてしまいました。うーむ。

無限ループの原因は、application/logs/ に生成されるログファイルでした。

以下のように application/ の中の contorllers/、models/、views/ のみを指定したら、無限ループしなくなりました。

$ phpunitrunner --phpunit-config=phpunit.xml -p ../application/third_party/CIUnit/bootstrap_phpunit.php -ac -w ../application/controllers,../application/models,../application/views .

(2011/07/28 追記) 上記のコマンドも本来は、

$ phpunitrunner --phpunit-config=phpunit.xml -ac -w ../application/controllers,../application/models,../application/views .

でいいはずですが、バグのため Stagehand_TestRunner 2.18.0 では正常に動作しません。php コマンドから phpunitrunner を実行することで、このバグを回避できます。

Stagehand_TestRunner 2.18.1 で修正され、上記で正常に動作するようになりました。

Eclipse/PDT から PHPUnit/CIUnit のテストを自動実行する へ続く。