Phpunit: 代码覆盖问题:致命错误:找不到“PHP_Token_Stream”类

创建于 2011-09-26  ·  22评论  ·  资料来源: sebastianbergmann/phpunit

我在新安装的 Ubuntu 11.04 64 位上运行 PHPUnit 3.5.15。 测试运行良好,但是,当尝试运行代码覆盖率时,会抛出错误:

$ phpunit --coverage-html build/coverage/ Tests/SomeTest.php 
PHPUnit 3.5.15 by Sebastian Bergmann.

...

Time: 1 second, Memory: 6.00Mb

OK (3 tests, 30 assertions)

Generating code coverage report, this may take a moment.
Fatal error: Class 'PHP_Token_Stream' not found in /usr/share/php/PHP/Token/Stream/CachingFactory.php on line 68

Call Stack:
    0.0002     639560   1. {main}() /usr/bin/phpunit:0
    0.0132    1151288   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:49
    0.0132    1152160   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:129
    0.0300    4052112   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:188
    1.5055    5682376   5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:363
    1.5059    5733328   6. PHP_CodeCoverage_Report_HTML->addItems() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:135
    1.5059    5734064   7. PHP_CodeCoverage_Report_HTML_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:213
    1.5059    5737416   8. PHP_CodeCoverage_Report_HTML_Node_File->__construct() /usr/share/php/PHP/CodeCoverage/Report/HTML/Node/Directory.php:156
    1.5062    5801152   9. PHP_CodeCoverage_Util::getLinesToBeIgnored() /usr/share/php/PHP/CodeCoverage/Report/HTML/Node/File.php:169
    1.5063    5801792  10. PHP_Token_Stream_CachingFactory::get() /usr/share/php/PHP/CodeCoverage/Util.php:271

为了调试目的,我手动在/usr/share/php/PHP/Token/Stream/CachingFactory.php包含了丢失的文件,差异是

<             include_once '/usr/share/php/PHP/Token/Stream.php';

再次运行相同的测试会导致以下错误:

Generating code coverage report, this may take a moment.
Fatal error: Class 'PHP_Token_OPEN_TAG' not found in /usr/share/php/PHP/Token/Stream.php on line 205

Call Stack:
    0.0002     639560   1. {main}() /usr/bin/phpunit:0
    0.0132    1151288   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:49
    0.0132    1152160   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:129
    0.0302    4052608   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:188
    1.5091    5682912   5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:363
    1.5095    5733840   6. PHP_CodeCoverage_Report_HTML->addItems() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:135
    1.5095    5734576   7. PHP_CodeCoverage_Report_HTML_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:213
    1.5095    5737928   8. PHP_CodeCoverage_Report_HTML_Node_File->__construct() /usr/share/php/PHP/CodeCoverage/Report/HTML/Node/Directory.php:156
    1.5099    5801688   9. PHP_CodeCoverage_Util::getLinesToBeIgnored() /usr/share/php/PHP/CodeCoverage/Report/HTML/Node/File.php:169
    1.5099    5802328  10. PHP_Token_Stream_CachingFactory::get() /usr/share/php/PHP/CodeCoverage/Util.php:271
    1.5106    5953392  11. PHP_Token_Stream->__construct() /usr/share/php/PHP/Token/Stream/CachingFactory.php:69
    1.5106    5957656  12. PHP_Token_Stream->scan() /usr/share/php/PHP/Token/Stream.php:147

有没有人经历过这种行为? 在接下来的几天里,我会尝试更仔细地研究它。

最有用的评论

找到了解决办法。 将 composer autoload.php 添加到 PHPUnit xml 配置文件中,如下所示:

<phpunit colors="true" bootstrap="vendor/autoload.php">

所有22条评论

我无法重现这一点。

我刚刚在 OSX Lion 下遇到了这个确切的错误

你能发布你的php包含路径吗? /usr/share/php/ 在里面吗?

我的系统上实际上不存在该路径...
我当前的包含路径是:'.:/usr/local/Cellar/php/5.3.8/lib/php'

从这条路径可以看出,我使用自制软件来安装 php

好的,那么你在哪里安装了 PHPUnit,你的 PHP/Token/Stream 目录在哪里? 确保所有这些都在 php 包含路径下(如有必要,请在 php.ini 中调整该路径),以便自动加载器可以找到它们。

如果类名是 PHP_Token_Stream 自动加载器将尝试执行 include("PHP/Token/Stream.php");

我对你的第一个问题的回答实际上让我思考 - 我的 include_path 缺少正常路径是没有意义的,所以我去挖掘 - 看起来我在自动加载类文件时遇到了问题。
我认为我需要多研究一下

感谢您的回复

@gpkamp认为问题是通过手动包含Token/Stream/Autoload.php ,你能试试看它是否也适合你吗?

通过重新安装所有东西,我的问题消失了,我将原始问题归咎于 PEAR :)

我试过重新安装好,但没有任何区别。
请注意,直到今天早上我做了某事,这对我来说都是完美的。 天知道那是什么:/

无论如何,在弄清楚我需要这一行之后:'''require 'PHPUnit/Autoload.php';'''(但我在今天早上之前不需要它......),我现在有另一个错误:

生成代码覆盖率报告,这可能需要一些时间。PHP 致命错误:第 205 行的 /usr/local/share/pear/PHP/Token/Stream.php 中未找到 Class 'PHP_Token_OPEN_TAG'

这里的事情变得_非常_奇怪......

请注意 - 添加:
require_once('PHP/Token/Stream/Autoload.php');
解决了我的问题。

嘿丹尼尔,同样的问题。
OSX + XAMPP 上的 PHPUnit 3.5.15。
梨版本:1.9.4
PHP 版本:5.3.1
Zend 引擎版本:2.3.0

你的 PEAR 和 PHP 版本是什么? 是的,将您的 require_once 添加到 PHP/Token/Stream/CachingFactory.php 的顶部会使其提交。

OSX + nginx/php-fpm/mysql/mongo 上的 PHPUnit 3.5.15 ;)
梨版本:1.9.4
PHP 版本:5.3.8
Zend 引擎版本:2.3.0

一位完全没有问题的同事报告说:
Ubuntu 11.04 + nginx/php-fpm/mysql/mongo 上的 PHPUnit 3.5.5
梨版本:1.9.1
PHP 版本:5.3.5-1ubuntu7.3
Zend 引擎版本:2.3.0

@danielhunt可以确认,添加 require_once('PHP/Token/Stream/Autoload.php'); 也为我解决了这个问题(谢谢!)。

@sebastianbergmann在这方面什么都没有? :)

我无法重现这个,抱歉。 并且不再支持 PHPUnit 3.5,也很抱歉。

...这太奇怪了:/
我会尝试重新安装整个批次,看看会发生什么

(为快速反应欢呼)

使用http://dustyreagan.com/downgrade-phpunit-3-6-to-3-5-15/上的步骤获取安装 PHPUnit 3.5.15 的正确版本和依赖项

添加代码片段也对我有用。

我设法部分重现了您的错误。
理想的情况是 PHPUnit 安装在 PEAR 文件夹内,但会出现问题。

我通过删除目录并通过 pear 命令再次下载 PHP 和 PHPUnit 来纠正问题。

将 PHP_TokenStream 的版本降级到 1.0.1 并为我工作。
须藤梨安装 --force phpunit/PHP_TokenStream-1.0.1

非常感谢@amitchhajer! 为我工作! ;)

5 年后,我遇到了同样的问题。 班级确实存在!
PHPUnit 5.3.4 版:

以 HTML 格式生成代码覆盖率报告...PHP 致命错误:在 /var/www/html/src/Controllers/ 中找不到类“AcmeControllersBaseController”第 11 行的 AdminController.phpPHP 堆栈跟踪:PHP 1. {main}() /usr/local/bin/phpunit:0PHP 2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:525PHP 3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:110PHP 4. PHPUnit_TextUI_TestRunner->doRun() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:159PHP 5. PHP_CodeCoverage_Report_HTML->process() phar:///usr/local/bin/phpunit/phpunit/TextUI/TestRunner.php:501PHP 6. PHP_CodeCoverage->getReport() phar:///usr/local/bin/phpunit/php-code-coverage/CodeCoverage/Report/HTML.php:68PHP 7. PHP_CodeCoverage_Report_Factory->create() phar:///usr/local/bin/phpunit/php-code-coverage/CodeCoverage.php:146PHP 8. PHP_CodeCoverage->getData() phar:///usr/local/bin/phpunit/php-code-coverage/CodeCoverage/Report/Factory.php:25PHP 9. PHP_CodeCoverage->addUncoveredFilesFromWhitelist() phar:///usr/local/bin/phpunit/php-code-coverage/CodeCoverage.php:182PHP 10. PHP_CodeCoverage->processUncoveredFileFromWhitelist() phar:///usr/local/bin/phpunit/php-code-coverage/CodeCoverage。
php:735

找到了解决办法。 将 composer autoload.php 添加到 PHPUnit xml 配置文件中,如下所示:

<phpunit colors="true" bootstrap="vendor/autoload.php">

此页面是否有帮助?
0 / 5 - 0 等级