globalとlocalのphpunitバージョンが違う時に出たエラー

phpunit の実行で以下のようなエラーメッセージが出た場合、


PHPUnit 4.5.1 by Sebastian Bergmann and contributors.

PHP Fatal error: Call to undefined method PHPUnit_Framework_TestResult::warningCount() in ~akky\AppData\Roaming\Composer\vendor\phpunit\phpunit\src\TextUI\ResultPrinter.php on line 185

Fatal error: Call to undefined method PHPUnit_Framework_TestResult::warningCount() in ~\akky\AppData\Roaming\Composer\vendor\phpunit\phpunit\src\TextUI\ResultPrinter.php on line 185

これは、composerで定義されたlocalにあるphpunit(./vendor/bin/phpunit)を呼ぶつもりで、globalにインストールされたphpunit(version 5.1.6)を呼んでいるために発生しているエラーのようです。

phpunitのバージョン表記が、なぜかlocal側の4.5.1で出てくるのでちょっと気づかなかったのですが、


$ ./vendor/bin/phpunit

とlocalのphpunitを呼ぶと、エラーは起こらなくなりました。

Laravelプロジェクトでも同様のエラーが報告されていました。globalのphpunitをuninstallすると解消した、というコメントもありますがつまりはそういうことでしょう。

composer.json で新しいphpunitが指定されていればこのトラブルは起こらないのでしょうけど、phpunitを更新するとテストが動かなくなる、ということもあるので、他のプロジェクトを持ってきてテストするとこういうことも起こるでしょう。

PHPUnit-skelgenでnamespaceを使ったクラスのstaticメソッドに対する生成コードがnamespaceエラーになる件

PHPUnit3.7.13で、Skelton Generatorユーティリティーを使ってannotationからのテストコード生成をしたら、なぜか実行時にエラーになってはまったので記録。

ここで指摘されてるんですがOpenのままですね。

phpunit-skelgenを使いたいのでstatic関数を使わない、となると本末転倒なので、pearで入れた(最近はComposerでも入るらしい。試してない)コードに手動でパッチをあてて解決。

SebastianBergmann\PHPUnit\SkeletonGenerator\Test.php
line. 299
// 'className' => $this->inClassName['fullyQualifiedClassName'],
'className' => $this->inClassName['className'],

line 324
// 'className' => $this->inClassName['fullyQualifiedClassName'],
'className' => $this->inClassName['className'],

[追記 2016-03-09] PHPUnit 5.1.7 になってもこの問題は解消していません。若干行番号がずれてますが同じ修正で対処できます。

しかし、Packagistのphpunit/phpunit-skeleton-generatorが、abandond となっています。もうスケルトンジェネレーターはやる気がないんでしょうか…