3

ComposerでPhpUnitを使用しようとしています。この目的で私はしました:

1リクエストコンポーザーセクションにphpunitを追加しました:

"require": {
    "php": ">=5.3.0"
},
"require-dev": {
    "phpunit/phpunit": "3.7.*"
},
"autoload": {
    "psr-0": {"PhpProject": "src/"}
}

2必要なものをインストールしました:

php composer.phar install --dev

操作は成功して終了しました。

phpunit / phpunit(3.7.6)のインストールダウンロード:100%

残念ながら、テストを実行したいときは、

./vendor/bin/phpunit PHP致命的なエラー:12行目の/home/serek/php/project/tests/bootstrap.phpにある非オブジェクトのメンバー関数add()を呼び出す

ComposerAutoloaderInit :: getLoader();を返すために問題が発生します。in vendor / autoloadは、テストブートストラップにNULLを返します。

ローダーをハッキングせずにどのように解決できるか考えていますか?

コード:phpunnit.xml.dist

> <?xml version="1.0" encoding="UTF-8"?>
> 
> <phpunit bootstrap="tests/bootstrap.php" colors="true">
>     <testsuites>
>         <testsuite name="PhpProject Test Suite">
>             <directory>tests/PhpProject/</directory>
>         </testsuite>
>     </testsuites>
> 
>     <filter>
>         <whitelist>
>             <directory suffix=".php">src/PhpProject/</directory>
>         </whitelist>
>     </filter> </phpunit>

tests / bootstrap.php(ここではオートローダーのみが必要です)

> $loader = require_once __DIR__ . "/../vendor/autoload.php";
> $loader->add('PhpProject\\', __DIR__); //<- this is problematic line 12 (comments has 9 lines) 

/../vendor/autoload.php

// autoload.php generated by Composer
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit::getLoader();
4

1 に答える 1

11

問題は、PHPUnitがすでにautoloadファイルを必要としているため、require_once呼び出しが実行されないため、戻り値が設定されないことです(phpはrequire呼び出しの戻り値を保持しないため、require_onceはそのユースケースで機能しなくなります)。

require最近のコンポーザーバージョンではオートローダーが2回作成されなくなり、何度も要求すると毎回同じインスタンスが返されるため、安全に変更できます。

于 2012-10-09T10:28:08.517 に答える