Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成PHPUnit代码覆盖率报告时无法重新声明类错误_Php_Zend Framework_Code Coverage_Phpunit - Fatal编程技术网

生成PHPUnit代码覆盖率报告时无法重新声明类错误

生成PHPUnit代码覆盖率报告时无法重新声明类错误,php,zend-framework,code-coverage,phpunit,Php,Zend Framework,Code Coverage,Phpunit,使用Zend Framework 1.10和条令2(Beta1)启动一个项目。我在自己的库代码中使用名称空间 在生成代码覆盖率报告时,我遇到了一个关于重新声明类的致命错误。为了提供更多信息,我注释掉了phpunit可执行文件中的xdebug_disable()调用,以便您可以看到函数跟踪(由于输出太多而禁用了局部变量输出) 这是我的终端输出: $ phpunit PHPUnit 3.4.12 by Sebastian Bergmann. ........ Time: 4 seconds, M

使用Zend Framework 1.10和条令2(Beta1)启动一个项目。我在自己的库代码中使用名称空间

在生成代码覆盖率报告时,我遇到了一个关于重新声明类的致命错误。为了提供更多信息,我注释掉了phpunit可执行文件中的xdebug_disable()调用,以便您可以看到函数跟踪(由于输出太多而禁用了局部变量输出)

这是我的终端输出:

$ phpunit PHPUnit 3.4.12 by Sebastian Bergmann. ........ Time: 4 seconds, Memory: 16.50Mb OK (8 tests, 14 assertions) Generating code coverage report, this may take a moment.PHP Fatal error: Cannot redeclare class Cob\Application\Resource\HelperBroker in /Users/Cobby/Sites/project/trunk/code/library/Cob/Application/Resource/HelperBroker.php on line 93 PHP Stack trace: PHP 1. {main}() /usr/local/zend/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/local/zend/bin/phpunit:54 PHP 3. PHPUnit_TextUI_Command->run() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:146 PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:213 PHP 5. PHPUnit_Util_Report::render() /usr/local/zend/share/pear/PHPUnit/TextUI/TestRunner.php:478 PHP 6. PHPUnit_Framework_TestResult->getCodeCoverageInformation() /usr/local/zend/share/pear/PHPUnit/Util/Report.php:97 PHP 7. PHPUnit_Util_Filter::getFilteredCodeCoverage() /usr/local/zend/share/pear/PHPUnit/Framework/TestResult.php:623 Fatal error: Cannot redeclare class Cob\Application\Resource\HelperBroker in /Users/Cobby/Sites/project/trunk/code/library/Cob/Application/Resource/HelperBroker.php on line 93 Call Stack: 0.0004 322888 1. {main}() /usr/local/zend/bin/phpunit:0 0.0816 4114628 2. PHPUnit_TextUI_Command::main() /usr/local/zend/bin/phpunit:54 0.0817 4114964 3. PHPUnit_TextUI_Command->run() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:146 0.1151 5435528 4. PHPUnit_TextUI_TestRunner->doRun() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:213 4.2931 16690760 5. PHPUnit_Util_Report::render() /usr/local/zend/share/pear/PHPUnit/TextUI/TestRunner.php:478 4.2931 16691120 6. PHPUnit_Framework_TestResult->getCodeCoverageInformation() /usr/local/zend/share/pear/PHPUnit/Util/Report.php:97 4.2931 16691148 7. PHPUnit_Util_Filter::getFilteredCodeCoverage() /usr/local/zend/share/pear/PHPUnit/Framework/TestResult.php:623 $phpunit 塞巴斯蒂安·伯格曼的PHPUnit 3.4.12。 ........ 时间:4秒,内存:16.50Mb OK(8个测试,14个断言) 生成代码覆盖率报告,这可能需要一些时间。PHP致命错误:无法在第93行的/Users/Cobby/Sites/project/trunk/code/library/Cob/Application/Resource/HelperBroker.PHP中重新声明类Cob\Application\Resource\HelperBroker PHP堆栈跟踪: PHP1。{main}()/usr/local/zend/bin/phpunit:0 PHP2。PHPUnit_TextUI_命令::main()/usr/local/zend/bin/PHPUnit:54 PHP3。PHPUnit_TextUI_Command->run()/usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:146 PHP4。PHPUnit\u TextUI\u TestRunner->doRun()/usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:213 PHP5。PHPUnit_Util_Report::render()/usr/local/zend/share/pear/PHPUnit/TextUI/TestRunner.php:478 php6。PHPUnit_Framework_TestResult->getCodeCoverageInformation()/usr/local/zend/share/pear/PHPUnit/Util/Report.php:97 PHP7。PHPUnit_Util_Filter::getFilteredCodeCoverage()/usr/local/zend/share/pear/PHPUnit/Framework/TestResult.php:623 致命错误:无法在第93行的/Users/Cobby/Sites/project/trunk/code/library/Cob/Application/Resource/HelperBroker.php中重新声明类Cob\Application\Resource\HelperBroker 调用堆栈: 0.0004 322888 1. {main}()/usr/local/zend/bin/phpunit:0 0.0816 4114628 2. PHPUnit_TextUI_命令::main()/usr/local/zend/bin/PHPUnit:54 0.0817 4114964 3. PHPUnit_TextUI_Command->run()/usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:146 0.1151 5435528 4. PHPUnit\u TextUI\u TestRunner->doRun()/usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:213 4.2931 16690760 5. PHPUnit_Util_Report::render()/usr/local/zend/share/pear/PHPUnit/TextUI/TestRunner.php:478 4.2931 16691120 6. PHPUnit_Framework_TestResult->getCodeCoverageInformation()/usr/local/zend/share/pear/PHPUnit/Util/Report.php:97 4.2931 16691148 7. PHPUnit_Util_Filter::getFilteredCodeCoverage()/usr/local/zend/share/pear/PHPUnit/Framework/TestResult.php:623 (我不知道为什么它会显示两次错误…?)

这是我的phpunit.xml:

<phpunit bootstrap="./code/tests/application/bootstrap.php" colors="true">
    <!-- bootstrap.php changes directory to trunk/code/tests,
    all paths below are relative to this directory. -->

    <testsuite name="My Promotions">
        <directory>./</directory>
    </testsuite>

    <filter>
        <whitelist>
            <directory suffix=".php">../application</directory>
            <directory suffix=".php">../library/Cob</directory>
            <exclude>
                    <!-- By adding the below line I can remove the error -->
                <file>../library/Cob/Application/Resource/HelperBroker.php</file>
                <directory suffix=".phtml">../application</directory>
                <directory suffix=".php">../application/doctrine</directory>
                <file>../application/Bootstrap.php</file>
                <directory suffix=".php">../library/Cob/Tools</directory>
            </exclude>
        </whitelist>
    </filter>

    <logging>
        <log type="junit" target="../../build/reports/tests/report.xml" />
        <log type="coverage-html" target="../../build/reports/coverage" charset="UTF-8"
            yui="true" highlight="true" lowUpperBound="50" highLowerBound="80" />
    </logging>
</phpunit>

./
../application
../library/Cob
../library/Cob/Application/Resource/HelperBroker.php
../application
../适用/原则
../application/Bootstrap.php
../library/Cob/Tools
我在接缝中添加了一个标签,用于隐藏此问题。我确实有另一个应用程序资源,但它不存在问题(另一个是条令2资源)。我不知道为什么它是特定于这个类的,我的整个库都是自动加载的,所以它们在任何地方都没有任何include/require调用。我想应该注意的是,HelperBroker是文件系统中源于library/Cob的第一个文件


我使用最新/最新版本的所有软件(Zend Server、Zend Framework、Doctrine 2 Beta1、Phing、PHPUnit、PEAR)在雪豹上工作。

总结此问题的一般答案:

此错误消息通常指向自动加载和/或require语句的问题。 在代码覆盖率报告生成期间,phpunit是
require
中的每个
*.php
。可以使用
addUncoveredFilesFromWhitelist=false
作为 参数,但建议保持此状态

可能的原因 在这些情况下,其中一个文件有一个
require
语句,它再次需要一个已经加载的类(因为它不是require\u)

其他原因可能是

  • 类的重复定义(一个用于调试,一个用于生产,应该通过继承而不是加载正确的php文件来解决)

  • 不一致的大小写导致php代码中出现错误,如:

    if(!$classesLoaded['thiscass'])需要_一次(…)位于多个不同大写字母的位置

  • 在测试中根本没有加载该类,但创建了一个模拟对象,其名称为加载的类的名称。这些可能会发生碰撞并导致错误


一个快速解决方法可能是在类声明的末尾添加一个if语句,以避免在运行phpunit时重新声明(如果且仅当这是您唯一遇到问题的类)


另一件要检查的事情(特别是当您使用VM时)是文件是否已重命名,但仍以原始形式存在。例如,fooMapper.php重命名为fooMapper.php(例如,通过SVN更新),IDE检测到新文件并将其发送到VM。现在,即使您的IDE在本地只显示一个版本,您的VM上也有两个版本。当心。

这件事发生在我身上,因为我的@covers声明中有一个打字错误。请注意第一行中的额外\项

App\Controller\\Account\UsersController::forgotPassword()
VS


我发现在使用不正确的
@coversDefaultClass
(同样可能也适用于
@covers
)注释时收到此错误。在我的例子中,是
\Path\To\\Class
(带双“\”)打乱了require调用。

在编辑pear/PHPUnit/Framework/TestResult.php以转储包含的文件时,出于某种原因,列出的文件是Helperbroker.php而不是Helperbroker.php!(该文件实际上是HelperBrok
App\Controller\\Account\UsersController::forgotPassword()
App\Controller\Account\UsersController::forgotPassword()