概要
NetBeansのPHPUnitの設定(プロジェクトごと)は、以下のものがあります。
プロジェクトのプロパティ > PHPUnit
- ブートストラップの使用
- XML構成の使用
- カスタム・テスト・スイートの使用
- カスタムPHPUnitスクリプトの使用
- PHPUnitを使用してすべての*Testファイルを実行
- テスト実行前にテスト・グループの入力を求める
今回は、「カスタムPHPUnitスクリプトの使用」について紹介したいと思います。カスタムPHPUnitスクリプトとは、PHPUnit実行時のオプションをいろいろと設定して使うものです。ドキュメントにも使い方が詳しく載っていないので、最初はどのように使ったらいいのかわからないかもしれません。簡単な使い方を説明したあとに、デフォルトで使われるNetBeansSuite.phpファイルを別のファイルと入れ替える方法も説明します。
Step 1 : 処理の流れを理解する
まず、どのような流れでNetBeans側で実行されるのかを見てみましょう。
- テスト(ファイル | フォルダ)を指定する
- ユーザがテストを実行させる
- ブートストラップ、XML等の設定を確認
- 引数に設定を追加
- 指定したテスト(ファイル | フォルダ)をNetBeansSuite.phpの引数に追加
- phpunit の実行
Step 2 : スクリプトを書く
デフォルトではどのようなものが実行されているのでしょうか?実際に書く前にどうなっているのかを説明します。
まず、PHPUnitを実行するためには、[オプション > PHP > 単体テスト]でPHPUnitの実行パスを指定しないといけません。Windowsであれば\path\to\phpunit.bat、Linux,Macであれば/usr/bin/phpunitといったものを設定しているはずです。
この設定の引数としてStep1の途中で出てくるオプションを追加しているのです。
Windowsの場合で説明します。実際にphpunit.batの中を見てみましょう。
最初に環境変数の設定をしていますが、要はphpを実行したいからphpのパスを設定して、phpunitファイルへ引数を渡しています。(バッチファイルでは#*が引数全部を表します。)
ではこのphpunitファイルって何?
これも中をみて確認するとわかりますが、phpファイルです。バッチファイルの最後の
“%PHPBIN%” “C:\path\to\phpunit” %* は php “C:\path\to\phpunit” %*
ということです。%*にはNetBeansで処理された引数が入ってきます。phpunitのバッチファイルにはphpの場所を設定する記述がありましたが、NetBeansを通して使う場合はこの部分は必要ありません。(php も書かなくてもたぶん動きます。ただし、オプションの設定でphpの実行パスを設定しておく必要がありますが。)
以上がデフォルトの動きです。
さて何をカスタマイズしましょうか?PHPUnitはCLIから実行する場合にいろいろなオプションを追加することができます。
参考:
カスタムPHPスクリプトとは、このオプションをカスタマイズすることができる機能です。
たとえば、—hoge オプションを追加したい場合は、適当な場所にmyphpunit.batファイルを作成して、次のように書きます。
php “C:\path\to\phpunit” –hoge %*
つまり、
php “C:\path\to\phpunit” [追加したいオプションたち] %*
といった書き方をして、カスタムPHPスクリプトとして設定すれば、オプションを追加した形でPHPUnitを実行することができます。
bashの場合では(myphpunit.sh)
/usr/bin/phpunit –hoge $*
といった感じでしょうか。これが基本的な使い方だと思います。間違っていたらすみません。。
Step 3 : デフォルトのNetBeansSuite.phpをカスタマイズしよう
次に応用的な使い方を紹介します。デフォルトではテストケースを実行する場合には、NetBeansSuite.phpというファイルを通して、テストケースが実行されます。テストケースを実行するときにsetUp()メソッドを使って共通の設定を行いたい場合があるとします。(CakePHPのテストケースをNetBeansで実行したい場合はここで設定を行う必要があります) 設定によってこのファイルを丸ごと変えることができると便利なのですが、今はその機能はありません。。代替方法としてカスタムスクリプトを使えば変更することが可能になります。
ちなみにカスタムテストスイートに設定しておけば大丈夫ですが、これは全体のテストでしか有効ではありません。
[gist id=3879106]
(NetBeansSuiteから実行されsetUp()が実行されないと思っていましたが、これは自分の書き方が悪かったようです。。原因はアホみたいな間違い。いろいろ試しているうちに混乱していました。ごめんなさい、ごめんなさい、ごめんなさい。でも直接カスタムスイートが実行されないのはバグだったようで、7.3で修正されますが、これ以上は無理そうです。)
個別のファイルで実行前に設定を行いたい場合には、NetBeansSuite.phpに直接記述が必要です。
でも直接編集するのもよくないし、バージョンが変わる事に毎回修正が必要になります。
そこでカスタムスクリプト使って、このファイルを丸ごと変えちゃおうという発想です。
batとshellを書いてみました。書いたことがほとんどなかったので、間違えていたら教えて下さい。
[gist id=3870579]
長々と書いてしまいましたが、おそらくわかるひとであれば、カスタムスクリプト使えるようになったよー。あーね。といった具合でわかるのだと思います。
ピンバック: CakePHP Run PHPUnit with NetBeans | 管理人の日記~つらつらなるままに~