nigoblog

技術系会社のCEOブログ~私的編~

PHPUnitのインストール for Mac ~追記あり~

前回アジャイルサムライを読んだのですが、
V: アジャイルなプログラミング
の章で

ユニットテスト:動くことがわかる

というのがあったんですね。(p235)
つまり、アジャイル開発ではテストコードを書く必要があるよと。
そんなわけで早速テストコードを書くために、PHPUnitをインストールしました!!
が、これがかなり手こずったので覚書として。

ちなみにPHPUnitですがpearのライブラリの一部で、コードを書くとコマンドラインでテストが出来るという優れもの。
というわけでインストールするまでを以下に示します。
参考はこちら PHPUnitのインストール

pearphpunitを認識させる

次のコマンドを使います。
pear channel-discover pear.phpunit.de
するとpearphpunitという存在を知ることができます。
しかし自分がやった時には ~ failed のような感じのものが出てしまいうまくいきませんでした。
実際にでたエラーはこちら

Discovering channel pear.phpunit.de over http:// failed with message: channel-add: temp_dir is not writable: "/private/tmp/pear/temp" - You can change this location with "pear config-set temp_dir"
Trying to discover channel pear.phpunit.de over https:// instead
Discovery of channel "pear.phpunit.de" failed (channel-add: temp_dir is not writable: "/private/tmp/pear/temp" - You can change this location with "pear config-set temp_dir")

なぜかよくわからなかったのでググってみるとどうやらユーザー権限が違う模様。
それでpearのあるディレクトリで
ls -l
としたところ

drwxr-xr-x 3 root wheel 102 9 5 11:50 pear

のようなものが現れました。つまりroot権限でないとここにいろいろ手を加えられないと。
なのでルート権限で実行してみました。
sudo pear channel-discover pear.phpunit.de
すると
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded
とでたので無事成功。

pearPHPUnitをインストールする。

次は
pear install phpunit/PHPUnit
としてインストールしようとしました。
またしてもエラーが出てしまうので同様に
sudo pear install phpunit/PHPUnit
ルート権限で実行すると

追記

これで実行してください

sudo pear install -a phpunit/PHPUnit

~省略~
install ok: channel://pear.phpunit.de/File_Iterator-1.3.1
install ok: channel://pear.phpunit.de/Text_Template-1.1.1
install ok: channel://pear.phpunit.de/PHP_Timer-1.0.2
install ok: channel://pear.symfony-project.com/YAML-1.0.6
install ok: channel://pear.phpunit.de/PHP_TokenStream-1.1.3
install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.1.3
install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.1.1
install ok: channel://pear.phpunit.de/PHPUnit-3.6.12

と出たので無事成功と!!

phpunitのバージョンを確認する

で最後にバージョンの確認ですが、
phpunit
を実行すると次のようなものが現れました。

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in /usr/lib/php/pear/PHPUnit/Autoload.php on line 45

Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.:') in /usr/lib/php/pear/PHPUnit/Autoload.php on line 45

どうやらAutoload.phpの45行目がなんか変だよということなのですが、そんなこと言われても…という感じでした。
でディレクトリを/usr/lib/php/pear/PHPUnit/に移動してみたらどうだろう?
と思い、
移動して実行したところ、
/usr/lib/php/
の段階でうまくいきました。
原因や理由はさっぱりですけど。

phpunit
を実行したところ。

PHPUnit 3.6.12 by Sebastian Bergmann.

Usage: phpunit [switches] UnitTest [UnitTest.php]
phpunit [switches]


~省略~

となりました。バージョンは3.6.12ですね。


という感じで結構苦戦したので同じエラーが出てしまって出来ないという人は参考に!!

使い心地なんかはいつか書きます。

ではでは

追記

上記の原因ですが、単純にPATHが通ってないだけですね。
インストールのところで

sudo pear install -a phpunit/PHPUnit

とすることでPATHが通り実行出来るようになります。
理由はPATHかどうなのかは不明ですが…