PHP_CodeCoverage_Filter::getInstance()运行phpunit时出错

PHP_CodeCoverage_Filter::getInstance()运行phpunit时出错,php,zend-framework,phpunit,code-coverage,Php,Zend Framework,Phpunit,Code Coverage,我在ubuntu 11.10中安装了phpunit,php版本为5.2.14 但当我运行测试模块时,它抛出了错误 PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/share/php/PHPUnit/Autoload.php on line 64 我遵循了这个问题中提到的步骤,但仍然没有运气 一个解决办法是绕过PEAR安装并通过使用本地副本,这是理所当然的,不是真正

我在ubuntu 11.10中安装了phpunit,php版本为5.2.14

但当我运行测试模块时,它抛出了错误

PHP Fatal error:  Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/share/php/PHPUnit/Autoload.php on line 64
我遵循了这个问题中提到的步骤,但仍然没有运气


一个解决办法是绕过PEAR安装并通过使用本地副本,这是理所当然的,不是真正的解决方案

在项目根目录中创建一个名为
composer.json的文件:

{
    "require": {
        "phpunit/phpunit" : "3.7.*"
    }
}
"config": {
    "bin-dir": "tests"
}
当然,如果您有这样的要求,可以将phpunit版本修改为“3.6.*”或类似版本

在项目根目录下:

#安装composer
$curl-shttps://getcomposer.org/installer |php
#告诉composer安装composer.json中标识的依赖项
$php composer.phar安装
#现在您可以调用phpunit的*local*副本
$./vendor/phpunit/phpunit/composer/bin/phpunit--version
为简单起见,可以创建phpunit可执行文件的符号链接。假设您希望符号链接位于名为
tests
的目录中:

$ln-s./vendor/phpunit/phpunit/composer/bin/phpunit./tests/phpunit
然后,您可以作为(从项目根目录)调用:

$cd测试
$./phpunit—版本
更简单的是,您可以指导Composer为您处理符号链接。将此添加到您的
composer.json

{
    "require": {
        "phpunit/phpunit" : "3.7.*"
    }
}
"config": {
    "bin-dir": "tests"
}
然后,与前面一样,您可以调用as(从项目根目录):

$cd测试
$./phpunit—版本
实际上,我通常做的是有一个名为
scripts
的项目级目录,并将我的composer
bin dir
指向那里。然后我在
tests
中手动创建一个符号链接,指向
scripts/phpunit
。但这最后一步可能比任何要求都更符合个人品味


也许要克服PEAR问题还有很长的路要走,但我发现基于Composer的安装对我来说非常可靠。

以下步骤解决了我的问题

sudo apt-get remove phpunit

sudo pear channel-discover pear.phpunit.de

sudo pear channel-discover pear.symfony.com

sudo pear channel-discover components.ez.no

sudo pear update-channels

sudo pear upgrade-all

sudo pear install --alldeps phpunit/PHPUnit

sudo pear install --force --alldeps phpunit/PHPUnit

我的平台Symfony 1.4没有安装与最新phpunit版本兼容的插件的最新版本。所以更新到最新版本对我来说很有用

请不要在您的问题中添加
random
code
formatting
。这使它很难阅读。@Charles-我已经检查了你的编辑,下次再处理。谢谢谢谢你的回答。我现在从上面的堆栈溢出问题参考安装了phpunit。但是现在我得到了
解析错误:语法错误,意外的T_函数,运行phpunit命令时,第45行的/usr/share/php/File/Iterator/Autoload.php中应为“')。下载的组件(如phpunit)中出现的语法错误听起来像是下载不完整。我会删除并重新安装。啊,我注意到您使用的是PHP5.2.14。phpunit3.7要求PHP>=5.3.3,而phpunit3.6只要求PHP>=5.2.7。除非您需要使用PHP 5.2,否则我建议将其升级到5.3。是的,我在谷歌搜索并了解它(phpunit)只需要PHP>=5.2.7,但我无法升级。仍在搜索其他解决方案:(…感谢您的大力帮助您仍然可以使用基于composer的安装。只需在
composer.json
中为phpunit版本指定
3.6.*