【问题标题】:Error when running PHPUnit运行 PHPUnit 时出错
【发布时间】:2020-07-19 00:31:21
【问题描述】:

当我尝试从项目的测试文件夹中运行 phpunit . 时出现以下错误:

PHP Fatal error:  Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/share/php/PHPUnit/Framework.php on line 46

我通过这些命令安装了 PHPUnit:

sudo pear channel-discover pear.symfony-project.com
sudo pear channel-discover components.ez.no
sudo pear install --alldeps phpunit/PHPUnit

因为其他方法似乎都不起作用,包括apt-get

认为 CodeCoverage 在某个时间点改变了他们的单例模式,因此删除了getInstance,但我不知道如何解决这个错误。如何降级 CodeCoverage 或升级 PHPUnit?

我尝试通过以下命令手动安装所有内容的最新版本:

sudo apt-get install git
mkdir phpunit && cd phpunit
git clone git://github.com/sebastianbergmann/phpunit.git
git clone git://github.com/sebastianbergmann/dbunit.git
git clone git://github.com/sebastianbergmann/php-file-iterator.git
git clone git://github.com/sebastianbergmann/php-text-template.git
git clone git://github.com/sebastianbergmann/php-code-coverage.git
git clone git://github.com/sebastianbergmann/php-token-stream.git
git clone git://github.com/sebastianbergmann/php-timer.git
git clone git://github.com/sebastianbergmann/phpunit-mock-objects.git
git clone git://github.com/sebastianbergmann/phpunit-selenium.git
git clone git://github.com/sebastianbergmann/phpunit-story.git
git clone git://github.com/sebastianbergmann/php-invoker.git
sudo cp -r dbunit/PHPUnit /usr/share/php/
sudo cp -r php-code-coverage/PHP /usr/share/php/
sudo cp -r php-file-iterator/File /usr/share/php/
sudo cp -r php-invoker/PHP /usr/share/php/
sudo cp -r php-text-template/Text /usr/share/php/
sudo cp -r php-timer/PHP /usr/share/php/
sudo cp -r php-token-stream/PHP /usr/share/php/
sudo cp -r phpunit/PHPUnit /usr/share/php/
sudo cp -r phpunit-mock-objects/PHPUnit /usr/share/php/
sudo cp -r phpunit-selenium/PHPUnit /usr/share/php/
sudo cp -r phpunit-story/PHPUnit /usr/share/php/
sudo cp -r phpunit/phpunit.php /usr/share/php/

但这没有任何帮助。现在我到处都是一堆垃圾:\


版本信息:

PEAR Version: 1.9.4
PHP Version: 5.3.6-13ubuntu3.3
Zend Engine Version: 2.3.0
PHPUnit 3.6.9 by Sebastian Bergmann.

Installed packages, channel pear.phpunit.de:
============================================
Package            Version State
File_Iterator      1.3.1   stable
PHPUnit            3.6.9   stable
PHPUnit_MockObject 1.1.1   stable
PHP_CodeCoverage   1.1.1   stable
PHP_Invoker        1.1.0   stable
PHP_Timer          1.0.2   stable
PHP_TokenStream    1.1.2   stable
Text_Template      1.1.1   stable

【问题讨论】:

  • 我无法让 phpUnit 在 Ubuntu 11.10 上为我工作。
  • 我有同样的问题,我已经用 50 分赏金 询问了它:stackoverflow.com/questions/8949963/…
  • 公开作为 PEAR 的对手,以及 PHPUnit 在当前状态下的发布方式。
  • @MikePurcell:嗯,我们没有太多的单元测试替代方案吗?那个容易安装和相对容易使用?这个项目到目前为止只有 2 个单元测试......所以我们仍然可以进行切换!
  • @Mark:好的,已经完成了文章的 v1.0,看看它,让我知道它是否适合你。祝你好运! melikedev.com/2012/01/25/php-phpunit-use-phpunit-without-pear

标签: php unit-testing phpunit ubuntu-11.10


【解决方案1】:

你可以试试这个,我在我的 Ubuntu 12.04 上做过

  1. sudo pear 卸载 phpunit/PHPUnit
  2. sudo pear 卸载 pear.phpunit.de/PHPUnit_MockObject
  3. sudo pear install pear.phpunit.de/PHPUnit_MockObject
  4. sudo pear install --alldeps pear.phpunit.de/PHPUnit

我尝试了许多其他方法。当我遇到错误时,这有效。

hegaofeng@ubuntu:~$ phpunit PHP 警告:require_once(PHPUnit/Framework/MockObject/Autoload.php): failed to open >?>stream: No such file or directory in /usr/share/php/PHPUnit/Autoload.php on line 48 PHP 致命错误:require_once(): 无法打开所需 >'PHPUnit/Framework/MockObject/Autoload.php' >(include_path='.:/usr/share/php:/usr/share/pear') 在 /usr/share /php/PHPUnit/Autoload.php > 第 48 行 hegaofeng@ubuntu:~$ cd /usr/share/php/

【讨论】:

    【解决方案2】:

    我在不使用实际的pear.phpunit.de 通道来安装 PHPUnit 时遇到了问题,尤其是在尝试使用 apt-get 或 yum 之类的包管理器时。尝试删除您从 git 存储库中提取的所有手动安装的内容,并对 PHPUnit 及其可选依赖项执行 pear uninstall。那么:

    • sudo pear 升级 PEAR
    • sudo pear config-set auto_discover 1
    • sudo pear install --alldeps pear.phpunit.de/PHPUnit

    这对我有用......希望它有所帮助。


    更新

    这可能不言而喻,但在执行上述步骤之前,您还应该清除以前的 apt-get 尝试:

    • sudo apt-get purge php5-pear

    【讨论】:

    • 好吧,给我编码一个不同的错误:PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Framework/MockObject/Autoload.php'
    • “MockObject”目录不存在。有趣的。你会认为“alldeps”会安装所有的deps。显然不是。如何取回 MockObjects?
    • 差点忘了——我也遇到了同样的问题。我相信正确的命令是:pear install phpunit/PHPUnit_MockObject。让我知道这是否不正确。 OOPS 我认为应该是pear install pear.phpunit.de/PHPUnit_MockObject
    • pear install phpunit/PHPUnit_MockObject 失败并显示“已安装”消息...但文件夹不存在..hrm。好的......再次卸载并重新安装,现在安装了模拟对象,但现在我得到了Failed opening required 'PHPUnit/Framework.php'。有一个Framework文件夹,但没有Framework.php
    【解决方案3】:

    Ubuntu 11.10 手动安装

    mkdir phpunit && cd phpunit
    git clone git://github.com/sebastianbergmann/phpunit.git
    git clone git://github.com/sebastianbergmann/dbunit.git
    git clone git://github.com/sebastianbergmann/php-file-iterator.git
    git clone git://github.com/sebastianbergmann/php-text-template.git
    git clone git://github.com/sebastianbergmann/php-code-coverage.git
    git clone git://github.com/sebastianbergmann/php-token-stream.git
    git clone git://github.com/sebastianbergmann/php-timer.git
    git clone git://github.com/sebastianbergmann/phpunit-mock-objects.git
    git clone git://github.com/sebastianbergmann/phpunit-selenium.git
    git clone git://github.com/sebastianbergmann/phpunit-story.git
    git clone git://github.com/sebastianbergmann/php-invoker.git
    cd phpunit && git checkout 3.6 && cd ..
    cd dbunit && git checkout 1.1 && cd ..
    cd php-code-coverage && git checkout 1.1 && cd ..
    cd phpunit-mock-objects && git checkout 1.1 && cd ..
    cd phpunit-selenium && git checkout 1.1 && cd ..
    sudo mv ./* /usr/share/php/
    ln -s /usr/share/php/phpunit/phpunit.php ~/bin/phpunit
    gksudo gedit /etc/php5/cli/php.ini
    

    将以下内容添加到您的include_path

    /usr/share/php/dbunit:/usr/share/php/php-code-coverage:/usr/share/php/php-file-iterator:/usr/share/php/php-text-template:/usr/share/php/php-timer:/usr/share/php/php-token-stream:/usr/share/php/phpunit:/usr/share/php/phpunit-mock-objects:/usr/share/php/phpunit-selenium:/usr/share/php/phpunit-story:/usr/share/php/php-invoker
    

    【讨论】:

      【解决方案4】:

      打开 /usr/share/php/PHPUnit/Framework.php 你会看到这个:

      trigger_error(
          'Please no longer include "PHPUnit/Framework.php".', E_USER_NOTICE
      );
      

      就是这样! 请不要再包含“PHPUnit/Framework.php”!!!

      【讨论】:

        【解决方案5】:

        在你的系统上安装 PHPUnit 之前,清除 pear 的缓存

        pear clear-cache
        

        据我所知,也许您还没有将 PHPUnit 与您的项目集成。您不需要只使用 PEAR 安装 PHPUnit,我相信您需要的文件不在项目中。

        【讨论】:

          猜你喜欢
          • 2012-12-11
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 2017-08-05
          • 1970-01-01
          • 2012-03-22
          • 2016-03-23
          • 2014-05-08
          相关资源
          最近更新 更多