【问题标题】:PHPUnit for symfony2.1 - cannot redeclare xyz()symfony2.1 的 PHPUnit - 无法重新声明 xyz()
【发布时间】:2012-09-12 21:47:15
【问题描述】:

我读到 PHPUnit 可以用 pear 或 composer 安装。 因为我在一个带有 WAMPSERVER 和一个用于控制台内容的 cygwin 的 Windows 上并且没有安装 pear,所以我通过 composer 安装了 PHPUnit。特别是从 symfony2.1 开始你必须使用 composer,所以I choose this method

我将它添加到我的 composer.json 中

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

然后做一个

php composer.phar install --dev

//Update1(感谢拆解者)

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 phpunit.xml.dist是我安装symfony的时候生成的,我没有修改。

<?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>

当我删除测试套件和过滤器块时,错误仍然存​​在。

【问题讨论】:

  • 你能展示使用 PHPunit 配置文件 (phpunit.xml.dist) 吗?可能有问题,或者 Composer 创建了自己的文件...

标签: php symfony pear symfony-2.1 composer-php


【解决方案1】:

我刚刚尝试过,在我的项目的bin 目录中创建了一个符号链接。所以我能够使用bin/phpunit 运行 PHPUnit。

【讨论】:

  • 哦,我没看到。 phpunit 有效,但我从供应商 functinon.php 收到两个错误(我编辑我的问题)
  • 从 symfony 2.1.2 开始,bin 目录不再位于 app/bin 中。现在它在 vendor/bin 中,现在可以正常工作了。
  • 对我来说,phpunit 也被符号链接到 {project_root}/bin 目录中。
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 2015-07-14
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多