1

PHPUnit は pear または composer でインストールできると読みました。私はWAMPSERVERとコンソール用のcygwinを備えたWindowsを使用しており、梨がインストールされていないため、作曲家を介してPHPUnitをインストールしました。特に symfony2.1 からは composer を使わなければならないので、私はこの方法を選びました。

これをcomposer.jsonに追加します

"require-dev": {
    "phpunit/phpunit": "3.7.*"
},

そして、

php composer.phar install --dev

//Update1 (unraveler に感謝)

bin ファイル (phpunit および phpunit.bat) は、アプリの bin ディレクトリにコピーまたはリンクされます。しかし、私が電話するbin/phpunit -c app/ と、このエラーが発生します:

Fatal error: Cannot redeclare assetic_init() (previously declared in C:\wamp_\www\symfony2.1\vendor\kriswallsmith\assetic\src\functions.php:20) in C:\wamp_\www\symfony2.1\vendor\kriswallsmith\assetic\src\functions.php on line 26

Call Stack:
    0.0005     128056   1. {main}() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\composer\bin\phpunit:0
    0.0095     433520   2. PHPUnit_TextUI_Command::main() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\composer\bin\phpunit:42
    0.0096     436736   3. PHPUnit_TextUI_Command->run() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:130
    0.0096     436952   4. PHPUnit_TextUI_Command->handleArguments() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:139
    0.0144     683168   5. PHPUnit_TextUI_Command->handleBootstrap() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:615
    0.0148     689328   6. PHPUnit_Util_Fileloader::checkAndLoad() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:787
    0.0152     689448   7. PHPUnit_Util_Fileloader::load() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\Util\Fileloader.php:77
    0.0200    1013688   8. include_once('C:\wamp_\www\symfony2.1\app\bootstrap.php.cache') C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\Util\Fileloader.php:93
    0.0202    1016424   9. require_once('C:\wamp_\www\symfony2.1\app\autoload.php') C:\wamp_\www\symfony2.1\app\bootstrap.php.cache:3
    0.0204    1017424  10. require('C:\wamp_\www\symfony2.1\vendor\autoload.php') C:\wamp_\www\symfony2.1\app\autoload.php:5
    0.0205    1017440  11. ComposerAutoloaderInit::getLoader() C:\wamp_\www\symfony2.1\vendor\autoload.php:7

PHP Fatal error:  Cannot redeclare assetic_init() (previously declared in C:\wamp_\www\symfony2.1\vendor\kriswallsmith\assetic\src\functions.php:20) in C:\wamp_\www\symfony2.1\vendor\kriswallsmith\assetic\src\functions.php on line 26
PHP Stack trace:
PHP   1. {main}() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\composer\bin\phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\composer\bin\phpunit:42
PHP   3. PHPUnit_TextUI_Command->run() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:130
PHP   4. PHPUnit_TextUI_Command->handleArguments() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:139
PHP   5. PHPUnit_TextUI_Command->handleBootstrap() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:615
PHP   6. PHPUnit_Util_Fileloader::checkAndLoad() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:787
PHP   7. PHPUnit_Util_Fileloader::load() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\Util\Fileloader.php:77
PHP   8. include_once() C:\wamp_\www\symfony2.1\vendor\phpunit\phpunit\PHPUnit\Util\Fileloader.php:93
PHP   9. require_once() C:\wamp_\www\symfony2.1\app\bootstrap.php.cache:3
PHP  10. require() C:\wamp_\www\symfony2.1\app\autoload.php:5
PHP  11. ComposerAutoloaderInit::getLoader() C:\wamp_\www\symfony2.1\vendor\autoload.php:7

なぜこれが実行されるのか、このディレクトリでテストを検索するように定義していません。エラーが発生したファイルを削除しようとしましたが、同様のエラーが発生しました:cannot redeclare別のクラス/関数のエラーです。そのため、ソースが 2 回読み込まれたようです。

//Update2 symfony をインストールしたときに phpunit.xml.dist が生成されましたが、変更はしていません。

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
    backupGlobals               = "false"
    backupStaticAttributes      = "false"
    colors                      = "true"
    convertErrorsToExceptions   = "true"
    convertNoticesToExceptions  = "true"
    convertWarningsToExceptions = "true"
    processIsolation            = "false"
    stopOnFailure               = "false"
    syntaxCheck                 = "false"
    bootstrap                   = "bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>

    <!--
    <php>
        <server name="KERNEL_DIR" value="/path/to/your/app/" />
    </php>
    -->

    <filter>
        <whitelist>
            <directory>../src</directory>
            <exclude>
                <directory>../src/*/*Bundle/Resources</directory>
                <directory>../src/*/*Bundle/Tests</directory>
                <directory>../src/*/Bundle/*Bundle/Resources</directory>
                <directory>../src/*/Bundle/*Bundle/Tests</directory>
            </exclude>
        </whitelist>
    </filter>

</phpunit>

テストスイートとフィルターブロックを削除しても、エラーはまだ残っています。

4

1 に答える 1

1

これを試したところ、プロジェクトのbinディレクトリにシンボリックリンクが作成されました。それで、PHPUnitをで実行できましたbin/phpunit

于 2012-09-20T15:05:08.033 に答える