我在新安装的 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
有没有人经历过这种行为? 在接下来的几天里,我会尝试更仔细地研究它。
我无法重现这一点。
我刚刚在 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">
最有用的评论
找到了解决办法。 将 composer autoload.php 添加到 PHPUnit xml 配置文件中,如下所示:
<phpunit colors="true" bootstrap="vendor/autoload.php">