问题
I've got a fresh copy of PHPUnit installed on my system (Ubuntu 11), but whenever I type phpunit
in the console I get the following error:
PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39
I have PHPUnit's code coverage installed, as far as I know:
>sudo pear install phpunit/PHP_CodeCoverage
phpunit/PHP_CodeCoverage is already installed and is the same as the released version 1.1.1
install failed
Why am I getting this error and how can I fix it?
回答1:
The executable script that loads PHPUnit must not have been updated when going to 3.6.x. Reinstall it.
sudo pear uninstall phpunit/PHPUnit
sudo pear install phpunit/PHPUnit
If this doesn't work, make sure PEAR itself is up-to-date.
回答2:
Ubuntu 11.10 has had an issue for a while that hasn't been fixed. This is the only thing that will get phpunit to work with pear. (Outside of using pear you can look up a way to do it without pear. There is an article online about that but I wouldn't want that kind of burden to do it manually). This is the only thing that worked for me:
sudo apt-get remove phpunit
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony-project.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
回答3:
For some, Anthony's solution will not work fully because of the Unknown remote channel: pear.symfony.com
or phpunit/PHPUnit requires package "channel://pear.symfony.com/Yaml"
.
SO here is the upgraded solution that solves this:
sudo apt-get remove phpunit
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony-project.com
sudo pear channel-discover components.ez.no
sudo pear channel-discover pear.symfony.com
sudo pear update-channels
sudo pear upgrade-all
sudo pear install pear.symfony.com/Yaml
sudo pear install --alldeps phpunit/PHPUnit
sudo pear install --force --alldeps phpunit/PHPUnit
回答4:
The method getInstance()
seems to have been dropped from the class.
https://github.com/sebastianbergmann/php-code-coverage/blob/master/PHP/CodeCoverage/Filter.php#L78
Use the constructor instead if you come across this error. However, this is not applicable to the opening post as the command came from PHPUnit itself.
回答5:
it works for me. at the beginning, I didn't use --force for the last command, I got a fatal error that "Call to undefined method PHP_CodeCoverage_Filter::getInstance". Then I used --force, which resolved this issue.
回答6:
While i had the same problem and managed to solve it using setting correct environment variables.
You can get to the solve here http://rkrants.blogspot.in/2013/01/installing-phpunitpear-in-ubuntu-1210.html
In short I had to re-install PHPUnit using pear after setting the variables correct.
I used a Ubuntu 12.10 installation and it works perfectly now.
回答7:
I came across the same problem, managed to solve it using composer
Try these steps -
First uninstall phpunit
sudo apt-get remove phpunit
Install composer - http://getcomposer.org/doc/01-basic-usage.md#installation
$ curl -sS https://getcomposer.org/installer | php
Install phpunit - http://phpunit.de/manual/3.7/en/installation.html
For a system-wide installation via Composer, you can run:
$ composer global require 'phpunit/phpunit=3.7.*'
You will also have to make sure that you have ~/.composer/vendor/bin/ in your path.
来源:https://stackoverflow.com/questions/9186000/call-to-undefined-method-php-codecoverage-filtergetinstance