Zend Framework 1.11.0 の tests でAllTests.php がエラーになる

昨夜の続き。
PHPUnitがなんとか入ったので /Zend/tests 下の AllTests.php を動かしてみるんだけどエラーが。


$ php AllTests.php

Notice: Please no longer include "PHPUnit/Framework.php". in /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php on line 50

Call Stack:
0.0010 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0014 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
0.0015 358312 3. require_once('/Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php') /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:26
0.0036 451800 4. trigger_error() /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php:50


Fatal error: Class 'PHPUnit_Framework_AssertionFailedError' not found in /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework/IncompleteTestError.php on line 59

Call Stack:
0.0010 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0014 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
0.0044 451916 3. require_once('/Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework/IncompleteTestError.php') /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:27

そんなファイルパスだしっぱなしで大丈夫か?
大丈夫だ。問題ない。

ネタはさておき、どうやらこれは、 PHPUnit のバージョンが新しいと出るらしい。
検索してみると、
http://code.google.com/p/yii/issues/detail?id=1641
というのがひっかかる。要は(PHPUnitが)バージョン新しくして構造変わっちゃってるから、PHPUnit/Framework.php を呼んでるところは PHPUnit/Autoloader.php を呼ぶようにして、ってこと?

というわけで、 /Zend/tests/TestHelper.php の require_once('PHPUnit/Framework.php'); を require_once('PHPUnit/Autoload.php'); に置き換えてみる。するとエラーが変わる。(要は今までのところはスルーできたってことだろう)


$ php AllTests.php

Fatal error: Call to undefined method PHPUnit_Util_Filter::addDirectoryToWhitelist() in /usr/local/ZendFramework-1.11.0/tests/TestHelper.php on line 80

Call Stack:
0.0009 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0013 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23

んー。まぁ確かに PHPUnit/Util/Filter.php にはそんなメソッドないしね。。。
これもどうやらPHPUnitが新しいせいらしい?検索してみると
http://youtrack.jetbrains.net/issue/WI-3198?projectKey=WI&query=phpunit
こんなページがひっかかる。
PHP_CodeCoverage_Filter::getInstance()->addFileToBlacklist(__FILE__, 'PHPUNIT');
ちょっと違うけど、要は新しいPHPUnitではPHPUnit_Util_Filterクラスをいじくったってことでしょう?
PHPUnit/Framework.php の中の記述も新しいスタイルのコードになってるし。

というわけで、その付近の関連コードも同じように修正してみる。
addDirectoryToFilter は addDirectoryToBlacklist にするみたい。
http://efreedom.com/Question/1-3810825/PHPUnit-Error-AddDirectoryToFilter

今度こそうまくいくだろ、と思ったら。


$ php AllTests.php

Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/Applications/XAMPP/xamppfiles/lib/php/pear/Zend): failed to open dir: Permission denied' in /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/CodeCoverage/Filter.php on line 115

UnexpectedValueException: RecursiveDirectoryIterator::__construct(/Applications/XAMPP/xamppfiles/lib/php/pear/Zend): failed to open dir: Permission denied in /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/CodeCoverage/Filter.php on line 115

Call Stack:
0.0209 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0216 355200 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
11.8038 2912572 3. PHP_CodeCoverage_Filter->addDirectoryToBlacklist() /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:91

あぁ、うん、xampp についてた 1.9.8 かなんかを使わないようにするために pear 下に入ってた Zend のディレクトリの権限を 000 にしてたんだけど。
てゆうか、そもそも Zend のパスは include してるのになんでそんな違うとこ見に行って権限がないとか言うの。。。
ちゃんとインクルードパスは新しいZendを前にしてあるのに。。。
仕方がないので当該ディレクトリ(/Application/XAMPP/xamppfiles/lib/php/pear/Zend)を mv で他のディレクトリに放り出す。

今度こそ!


$ php AllTests.php

Fatal error: Call to undefined method PHPUnit_Util_Filter::addFileToFilter() in /usr/local/ZendFramework-1.11.0/tests/Zend/Barcode/AllTests.php on line 36

Call Stack:
0.0008 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
11.2078 3172232 2. require_once('/usr/local/ZendFramework-1.11.0/tests/Zend/AllTests.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:29
12.3489 18378744 3. require_once('/usr/local/ZendFramework-1.11.0/tests/Zend/Barcode/AllTests.php') /usr/local/ZendFramework-1.11.0/tests/Zend/AllTests.php:35

うん、すいません。そもそもちゃんと使い方わかってなかった俺が悪いんだけど、Zend/tests/Zend 以下の AllTests.php 全部に影響するんだね。。。
無理w いちいち直してられない。
それなら古いバージョンのPHPUnitをインストールしたほうがよほど簡単な対応で済むのでわ。。。?

たぶんきっと次の次くらいのリリースまでには新しいPHPUnitに対応したソリューションが出来ると思うので、それまでこれは触らない方向で。。。