PHPUnit:警告:require(PHPUnit / Autoload.php):无法打开流:第42行/ usr / local / bin / phpunit中没有这样的文件或目录

时间:2011-11-30 21:37:03

标签: phpunit osx-lion mamp

运行时

  • PHPUnit的

我收到错误

Warning: require(PHPUnit/Autoload.php): failed to open stream: No such file or directory in /usr/local/bin/phpunit on line 42

Fatal error: require(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.:') in /usr/local/bin/phpunit on line 42

/ usr / local / bin / phpunit在第42行显示以下内容:

require 'PHPUnit/Autoload.php';

有关如何解决此问题的任何建议吗?

更新(1):

我在/ etc /中缺少php.ini,所以我通过符号链接来阅读MAMP php.ini。现在我得到

php -r 'foreach (explode(":", get_include_path()) as $path) echo $path . PHP_EOL;'
.
/Applications/MAMP/bin/php/php5.3.6/lib/php
/usr/local/bin/pear
/usr/local/share/pear/PHPUnit

运行

  • PHPUnit的

正在运行,但没有输出。

有什么建议接下来要检查什么?

更新(2):

可能这个问题的根本原因与问题

有关

6 个答案:

答案 0 :(得分:12)

我在MAC OSX Lion上遇到了类似的问题。我用PEAR包管理器安装了phpunit,当我尝试运行它时,我得到了udo所描述的错误。我能够通过以下简单步骤解决它:

  1. 获取pear curl http://pear.php.net/go-pear.phar > go-pear.php
  2. 的最新php存档
  3. 使用sudo php -q go-pear.php
  4. 安装存档

    在安装过程中,它会检测php.ini中的include_path是否不包含PEAR PHP目录。在给定选项时,您可以选择让它自动为您修复。

答案 1 :(得分:5)

您必须拥有PHP include path上包含PHPUnit源文件的文件夹。此外,在3.6中添加了PHPUnit/Autoload.php,您可能会使用较旧的3.5.x源文件夹。检查使用

列出的文件夹
php -r 'foreach (explode(':', get_include_path()) as $path) echo $path . PHP_EOL;'

(或在Windows上)

php -r"foreach (explode(':', get_include_path()) as $path) echo $path . PHP_EOL;"

并确保其中一个文件夹包含PHPUnitAutoload.php文件夹。

更新:关于您的更新,您可能希望从包含路径中删除/usr/local/share/pear/PHPUnit,因为您的PHPUnit/Autoload.php应包含/usr/local/share/pear已经在包含路径中。

要确保PHPUnit正常运行phpunit --version,以便您可以看到已安装的版本。 PHPUnit在输出任何内容之前实例化它计划运行的所有测试用例。如果您的任何测试用例在加载时导致致命错误,有时根本不会显示任何输出。这非常令人沮丧。首先创建可能不使用任何代码的最简单的测试用例。

class MyTest extends PHPUnit_Framework_TestCase {
    function testThatItWorks() {
        self::assertTrue(true);
    }
}

运行此测试应该产生一次通过测试。试一试并粘贴您在问题中看到的内容。

答案 2 :(得分:5)

当我从本地目录运行phpunit.phar时遇到了这个问题,但是还安装了PHPUnit作为作曲家依赖项。删除PHPUnit编写器依赖项解决了我的问题。

答案 3 :(得分:3)

要添加到之前的答案:正在加载php.ini文件的双重检查,并确保使用其他路径编辑该文件。我用以下内容检查加载的php.ini

php -r 'phpinfo();'

哪位告诉我加载的php.ini文件是 /private/etc/php.ini

然后我用“which”告诉我phpunit的安装位置:

which phpunit

然后我将该路径添加到php.ini文件中,因此最终看起来像这样:

;***** Added by go-pear
include_path=".:/Users/admin/pear/share/pear:/php/includes:/usr/bin:/usr/lib/php/"

只有在完成所有操作之后,“phpunit --version”和其他命令才能按预期工作。

答案 4 :(得分:2)

应该注意的是,面临此问题的大多数用户必须运行命令

$ phpunit

从命令提示符

。当他们得到上述错误。我们大多数人都无法理解真正的问题是,在命令提示符下使用的PHP与您在Web服务器中为您运行的PHP大多不同。我个人使用lampp,即使我已经成功地使用pear正确安装了phpunit,但我几个小时都未能意识到这一重要部分。

<强>解决方法   - 任何时候你需要运行需要include_path中的资源的PHP脚本,请确保你使用的相应PHP二进制文件的php.ini配备齐全。在我的ubuntu 12.04安装的情况和点与xampp我的两个php二进制文件包括

  • 命令行一个,即在/ etc / php5 / cli /目录
  • 中找到的php5-cli
  • xampp,即apache使用的php,用于在/opt/lampp/etc/php.ini中找到我的页面

php.ini文件必须具有您理想的正确include_path声明,才能正确引导任何命令行脚本和服务器端(apache服务脚本)。

在正确配置php.ini之后回到我们的问题,记得

  • 重新启动Apache,以便Web服务器选择您的更改
  • 重新启动终端/命令行会话,以便cli提示选择您的更改

在Linux / * nix系统中更改文件时遇到问题的常见错误

  • 记得运行chwon拥有php.ini文件,否则你甚至无法编辑它们

  • 记得运行chmod并更改值以允许您保存更改,之后您可以将所有内容(文件上的访问控制,即chwon和chmod恢复到之前的状态)返回到它们的方式,它应该是重新启动终端和apache后确定。

祝你好运

答案 5 :(得分:2)

霍华德罗在Mac OSX上的评论非常有用 塞巴斯蒂安佩雷斯的评论。因为这句话格式不是很好,所以可能会被忽略。在小牛队更新OSX之后,我第二次跑到这个问题,U决定为这个问题创建这个完整的Apple OSX解决方案。我不得不说我已经安装了几个不同版本的php的MAMP-PRO,所以我需要非常准确。

  1. 检查您是否在/ private / etc中安装了php.ini。如果没有发出命令:

    $ sudo cp /private/etc/php.ini.default /private/etc/php.ini

  2. 获取梨的最新php档案

    $ curl http://pear.php.net/go-pear.phar&gt;去-对PEAR.php

  3. 使用

    安装存档

    $ sudo php -q go-pear.php

  4. 在安装过程中,它会检测php.ini中的include_path是否不包含PEAR PHP目录。在给定选项时,您可以选择让它自动为您修复。

  5. 完成这些步骤后,我必须使用以下命令再次安装phpunit:

    $ sudo pear channel-discover pear.phpunit.de

    $ sudo pear channel-discover components.ez.no

    $ sudo pear channel-discover pear.symfony-project.com

    $ sudo pear install phpunit / PHPUnit

  6. 非常感谢Howard Lo和Sebastian Perez。