2016-10-24 2 views
0

私は作曲家を使ってphpunitをグローバルにインストールしました。しかし、私はコンポーザーも使用するプロジェクトでそれを使用したいが、phpunitはインストールされていない(これは退屈な理由がある)。phpunitを使用して、Composerオートローダーでクラスのグローバルベンダーディレクトリとローカルベンダーのディレクトリをチェックする方法は?

私は以下の最初のテストを実行し、エラーを取得します。

Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /vagrant/sites/core/trunk/Notify/php/tests/MyFirstTest.php on line 5 

私は、世界的な作曲家のオートローダーをロードすると、PHPUnitのは、PHPUnitのクラスのグローバル作曲ディレクトリに見てみましょうだろうが、それを見つけることができるようには見えないと思いました。私はそれがグローバルなものの代わりにローカルの作曲家のディレクトリに$ vendorDir(下)を設定していると思います。両方をチェックする方法はありますか?

ここに、クラスがグローバルな自動ロードクラスマップにあることを示す/home/vagrant/.composer/vendor/composer/autoload_classmap.phpの行があります。

'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', 

ここでは、プロセスの開始に使用しているコマンドラインを示します。

phpunit --bootstrap tests/bootstrap.php tests/MyFirstTest.php 

はここでここで私はグローバルPHPUnitのオートローダをロードbootstrap.phpのだMyFirstTest.php

<?php 

use PHPUnit\Framework\TestCase; 

class MyFirstTest extends TestCase { 
    public function testOneIsOne() { 
     $this->assertEquals(1, 1); 
    } 
} 

です。

<?php 

require_once('/home/vagrant/.composer/vendor/autoload.php'); 

この質問を書くことは、私の考えをはっきりと示すのに役立ちました。もし誰かがすてきな解決策を持っているなら、それは素晴らしいだろう。私はphpunitをローカルにインストールしなければならないと思っています。

助言をお寄せください。

+3

あなたの 'composer.lock'ファイルの' require-dev'セクションにphpunitを追加しないと、私は考えていません。あなたのプロジェクトにインストールするだけです。 –

答えて

0

問題は、私が使っているプロジェクトでphp 5.5.9を使用していて、PhpUnitの現在のバージョンが5.0以上でphp 5.6.0が必要なため、PhpUnit 4.8を使用していたということでした。

phpunit.de/getting-started.htmlのチュートリアルは、PhpUnit 5.0以降です。 PhpUnit 5.0はフレームワークに名前空間を導入したようです。その前に、私がロードしようとしていたPHPUnit \ Framework \ TestCaseクラスはPHPUnit_Framework_TestCaseでした。

あなたが実際にクラスマップファイルの行であることがわかります。

'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', 

しかし、私はクラスの名前にアンダースコアだけで作曲家のクラスマップを論争いくつかの名前が名前空間を表現するためにやったと思っていました。

MyFirstTest.phpを適切なクラスPhpUnit_Framework_TestCaseを探して変更し、useステートメントを削除すると、すべて正常に機能しました。 PhpUnitをローカルにインストールする必要はありませんでした。グローバル・コンポーザー・ベンダー・ディレクトリーに適切なクラスが見つかりました。

<?php 

class MyFirstTest extends PhpUnit_Framework_TestCase { 
    public function testOneIsOne() { 
     $this->assertEquals(1, 1); 
    } 
} 
関連する問題