phpunit - 无法使用 CodeCoverage 和 Composer 重新声明类错误

标签 phpunit code-coverage autoload composer-php

使用 Composer 的 autoload.php 作为引导文件时,我遇到 PHPUnit Code_Coverage 错误。我创建了自己的 boostrap.php 文件,只需单独包含每个文件即可,一切正常。我是否偶然发现了 Composer 错误,或者我在某个地方犯了错误?

//编辑:我正在使用所有内容的最新(最新)版本:PHPUnit 3.7.12、Code_Coverage 1.2.7、Composer b51a4a7

Fatal error: Cannot redeclare class C3\CDN\EdgeCast in /Users/kperrine/Projects/edgecast-custom-reports/src/C3/CDN/EdgeCast.php on line 11

Call Stack:
    0.0017     641760   1. {main}() /Applications/MAMP/bin/php/php5.3.14/bin/phpunit:0
    0.2232    1111312   2. PHPUnit_TextUI_Command::main() /Applications/MAMP/bin/php/php5.3.14/bin/phpunit:46
    0.2232    1112040   3. PHPUnit_TextUI_Command->run() /Applications/MAMP/bin/php/php5.3.14/lib/php/PHPUnit/TextUI/Command.php:129
    0.3027    4636952   4. PHPUnit_TextUI_TestRunner->doRun() /Applications/MAMP/bin/php/php5.3.14/lib/php/PHPUnit/TextUI/Command.php:176
   21.5764    6604032   5. PHP_CodeCoverage_Report_HTML->process() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php:384
   21.5764    6604240   6. PHP_CodeCoverage->getReport() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php:120
   21.5768    6663512   7. PHP_CodeCoverage_Report_Factory->create() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php:158
   21.5769    6663512   8. PHP_CodeCoverage->getData() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php:64
   21.5769    6663512   9. PHP_CodeCoverage->addUncoveredFilesFromWhitelist() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php:190
   21.5769    6664408  10. PHP_CodeCoverage->processUncoveredFileFromWhitelist() /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php:535
   21.5778    6757272  11. include_once('/Users/kperrine/Projects/edgecast-custom-reports/src/C3/CDN/EdgeCast.php') /Users/kperrine/Projects/edgecast-custom-reports/vendor/phpunit/php-code-coverage/PHP/CodeCoverage.php:558

我的 phpunit.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
>
    <testsuites>
        <testsuite name="C3 EdgeCast Tests">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
        </whitelist>
    </filter>

    <logging>
        <log type="coverage-html" target="log/report" charset="UTF-8"
            highlight="false" lowUpperBound="35" highLowerBound="70"/>
    </logging>
</phpunit>

最佳答案

问题出在我在项目中使用命名空间。我的项目命名空间是 C3\CDN\EdgeCast(注意 EdgeCast 中的大写“C”),但是当我在测试文件中使用该命名空间时,我不小心输入了 use C3\CDN\Edgecast; (注意 Edgecast 中的小写“c”)。名称的差异导致 CodeCoverage 或 Composer(我不知道到底是哪一个)认为该类尚未包含在内,因此尝试再次包含它。

这个故事的寓意:始终仔细检查您的类和命名空间名称。

关于phpunit - 无法使用 CodeCoverage 和 Composer 重新声明类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249339/

相关文章:

php - Symfony Simple PHPUnit 退出代码 1,未显示错误

testing - 没有 Laravel 的模拟 Illuminate Config facade

java - 用于 netbeans 7 模块开发的代码覆盖率工具

c++ - 用于多线程应用程序的 GCOV

curl - PHPUnit - 远程代码覆盖

docker - 流明:PHPUnit失败,但在Gitlab CI Runner中通过了测试

.net - 人员(手动)测试的代码覆盖率?

PHP 试图使用自动加载功能来查找 PDO 类

ruby-on-rails - LoadError 无法自动加载常量

php - 在 php 中包含路径和 __autoload 函数