読者です 読者をやめる 読者になる 読者になる

WindowsでPHPUnitを使う

ネットワーク上にアップロードして動作テストももちろん必要ですけども、ユニットテストはローカル環境(ていうかDBに繋がらない環境)でやってエラーが起きないようにすること…という方針。らしい。

その根拠はブンにはよく分からないんだけども。でもまあ、あっちこっち依存しまくりの現状はやっぱりよくないんだというのは、なんとなーく分かる。

今までずっとサーバーにアップロードしてテストばっかしてきたブンも、とうとうローカルでPHPを実行できる環境を構築する時がきてしまったのだ…

構築する環境の条件は以下の通り。

PHPPHPUnitは実際に動かすWebサーバーのバージョンになるだけ合わせようとしているため、現在リリースされているものより若干(?)古めです。

ローカル開発でどんなツールを使う?

まず考えるべきはこれだよネ。なにを使うかによって用意するものって変わるからネ。

  1. Netbeans
  2. Xampp
  3. Visual Studio Code

ブンが候補として考えたのはこの3つ。

Xamppは他2つとはアプリケーションとしての種別が違うんだけど、『PHPUnitを動かせる環境』ということで調べていたら引っかかってきたのでした。これ使うんならなにか別にエディタを考えたほうがいいかな、くらいに思っていた。大丈夫、初期はLinux上でemacsとかviとか使ってたからどうにかなるなる。

Netbeans

バージョン管理システムが開発フローに導入された当初、まずそのシステムがよく分からなくて、新しいコマンドを覚えられる気もしなくて、その辺カバーしてくれそうなNetbeansを頼ったのです。最初はsvn、その後gitに移行したのだけど、大きなストレスなく移行できたのはとても有難かった…

もう1年以上これを使って開発続けていたので、このまま続行できれば一番だった、ん、だけど、ネ?

PHPUnitが使えることは突き止めたものの、どうしても動かない!「実行したテストはありません」って出る!設定はできてるのに!

どうもアプリケーション側のバグっぽかったんで、バージョンアップしたら直る、かも、しれない。

でもNetbeansのバージョンアップって、新しいバージョンを別に入れて設定し直すってやり方らしく…「それならいっそ別のツールを視野に入れてみようか」ということで、次へ!

Xampp

名前だけはよく聞いていたモノ。WindowsPHPやる場合の定番仮想環境、というのかな?

有名なものみたいだしせっかくだから入れて触ってみた。

ん、んー…んん…

すまない、Linuxコマンドに慣れ切ったブンにはcmdコマンドであれもこれも操作するのは、ちょっと、だいぶ、めんどかった!

ハイ次!!

Visual Studio Code

Netbeansの代わりにとオススメされたもの。

Netbeansより軽いというのは魅力的。ただ、Netbeansと違いWindowsにgitをインストールする必要がある。「gitがインストール済みであることが前提」っ て書かれた解説ページ多くて「???」となった、頭の弱いブン。

別途『Windowsにgitをインストールする方法』を調べて、とりあえず以下を入れてみた。

TortoiseGit使ったのは、最初のcloneだけでした…後はGitインストールしたらついてきたGit Bashでなんとかなったヨ。これLinuxライクでコマンド打てるから助かる~!

最近gitコマンドを打つ機会も増えたから、簡単なのは覚え始めたのです…cloneも分かったのでTortoiseGitもうなくてもいいかな…今度アンインストールしとこう。

そしてVisual Studio Codeをインストール

cloneしてきたプログラムのディレクトリを読み込んで、開いて、文字コード設定いじって(ファイルはEUC-JPなので)、試しに内容を変更してみたりして。

おお、おお…悪くない、というか結構イイ感じ!?

ちょっとこれで進めてみようー、ということで、Visual Studio CodeでPHPUnitが実行できるようにするヨ!

PHPUnitのインストール

まあこれは実はNetbeansでアレコレやってる時に済ませてしまっていたのだけど。

今回は流れだけで詳細は省き!メモメモ!

  1. PHP公式からWindows用の5.6パッケージをダウンロード
  2. 適当な場所に↑を解凍(ブンはC:\phpにした。迷子にならない、大事)
  3. システムの環境変数PATHに設置場所へのパスを設定
  4. PHPUnit公式から4.8をダウンロード
  5. 適当な場所に設置(これもC:\phpunitにした)
  6. 公式マニュアルを元にphpunit.cmdを作成
  7. phpunit.cmd --versionコマンドプロンプトから叩いたらバージョン情報が表示され、た!

これでPHPUnitの準備はオッケー…?

PHPUnitVisual Studio Codeで使う

拡張機能があった。いいネ、分かりやすい!

PHPUnitという拡張機能をインストールして有効化、そしたら設定をオーバーライド。

"phpunit.execPath": PHPUnitプログラムのパス

必須なのはこれだけかな?

実行時の設定ファイル指定とかあるなら、

"phpunit.args": [ "--configuration", "設定ファイルのパス" ]

とか書くといいみたいだヨ。

ブンはサーバー側で使っているphpunit.xml.distをそのまま持ってきて指定した。

Visual Studio Codeはテストを実行するためのメニューとか分かりやすいボタンとかない。でもテストファイルのクラスやメソッドにフォーカス合わせてコマンドパレットというところにphpunitと打つと、そのクラスまたはメソッド限定でテストが実行されるらしい。しゅげー!

あ、動きました、ちゃんと動いた。想定外なエラーは吐きまくってたけど。

エラーの原因は?(オマケ)

ここから先はブンのところの環境に依存しまくった話である。

includeファイルが全文ぺろっと表示される!

これに一番時間を使ったわけだけど、もうどうしても分からなくてひとにすがってみたら、

「それショートコードが許可されてないからですよ、php.iniいじってみてください」

「!!!」(ブンの馬鹿っぷりが露呈した瞬間)

ま、マジかー、マジだったー…

ショートコードってphp.iniで許可設定とかされてるものなんですネ…これまでiniいじる機会ほとんどなかったから知らなかったヨ…

一部のincludeファイルが読み込めない!

これはすごく単純な話。

gitで管理されていないファイルが指定されていた。

テスト対象プログラムで読み込んでるPHPのライブラリとか、テストプログラムで読み込んでるサーバー側でcomposer実行してインストールしたものとか…空ファイル作って対処。

mb_convert_kana()が存在しない!

これは!ブンにも分かったヨ!

php.iniでmbstring絡みの設定を変更したらいけるんでしょ!?(いけた)

DB接続するグローバルファンクションがある!

あー…あーーーーーー…

ダミー定義するしかないよネ? でもクラス定義がなくてちょっと前に教えてもらったモックオブジェクト手法が使えないので、どうしようかと他の人に相談しました。

結局、問題のファンクションの前にfunction_exists()による存在チェックを入れて(むしろなかったことが問題)、先にテスト関連のプログラムでダミーファンクション定義してしまうことと相成りました。

日本語が化けてテストがエラーになる!

mbstring系の関数使ってた部分でネ、引っ掛かりましたよネ…

一応解決はできた。けど文字コード面倒くさいよく分からないもう嫌だ…

詳細はまた別途メモしておこう…