【问题标题】:PHPUnit (Phar) Fatal Error Only When Test FailsPHPUnit (Phar) 仅在测试失败时出现致命错误
【发布时间】:2016-10-06 07:26:07
【问题描述】:

我已选择使用PHPUnit (phpunit-4.8.26.phar) 中的Phar 来对我自定义构建的 PHP 框架和应用程序进行单元测试。我使用旧的稳定版本的原因是因为我需要与PHP 5.4.29 兼容。

我选择不使用Composer 来获取PHPUnit 的原因是因为它倾向于用依赖项污染我的vendors 文件夹。我喜欢尽可能保持精简。

我正在使用Windows 7 Pro SP1WampDeveloper v5.4.0.1ProPhpStorm 2016.1.2Phing 和一大堆其他很酷的东西来做我的事情。

问题

  • 可以在 PhpStorm 中成功运行通过单元测试。
  • 可以在 PhpStorm 中成功运行一组通过单元测试。
  • 无法在 PhpStorm 中成功运行失败的单元测试。
  • CAN 从命令行成功运行了通过的单元测试。
  • CAN通过命令成功运行了一组通过单元测试。
  • 无法从命令行成功运行 FAILING 单元测试。

而不是 PHPUnit 显示典型的测试失败消息,它退出并出现以下错误:

警告:require(Composer\Autoload\ClassLoader.php):打开失败 流:中没有这样的文件或目录 D:\WampDeveloper\Websites\qclean.development\bootstrap\Autoloader.php 第 23 行

致命错误:require():无法打开所需的“Composer\Autoload\ClassLoader.php” (include_path='.;D:\WampDeveloper\Tools\PEAR\pear;D:\WampDeveloper\Tools\PEAR;D:\WampDeveloper\Components\Php\PEAR;D:\WampDeveloper\Tools\PHPMailer;') 在 D:\WampDeveloper\Websites\qclean.development\bootstrap\Autoloader.php 第 23 行

以及扩展上述内容的屏幕截图:

支持信息

我的目录结构:

我的单元测试脚本('ConfigurationTest.php'):

我的 PHPUnit XML 配置文件('TestAll.xml'):

最后是我的自动加载器('Autoloader.php'):

错误和警告表明无法加载Composer\Autoload\ClassLoader.php 文件。我不明白为什么当我使用Phar 时它会要求这个文件?从 Internet 上读取 sn-ps 表明 Phar 应该有一个内部自动加载器,尽管我看不到它。

我不想安装Composer 只是为了让它成为自动加载器。这将破坏试图单独使用 Phar 的目的。

我将PHPUnit Phar 路径添加到我的Windows %path%,但这并没有什么区别。我知道如果 PHPUnit 是使用 PEAR 安装的,应该这样做。

任何关于“拔毛问题”的帮助将不胜感激......

【问题讨论】:

  • 总是发布代码,而不是它的图像
  • “我选择不使用 Composer 来获取 PHPUnit 的原因是因为它往往会污染我的供应商文件夹的依赖项。我喜欢让它尽可能精简”。这就是为什么作曲家允许要求某些依赖项为dev。在生产中部署时,您执行composer install --no-dev,因此只安装生产代码所需的依赖项。
  • @Christian Giupponi。是的,你是对的。我的 foobar。

标签: php phpunit phpstorm phar


【解决方案1】:

如果您查看堆栈跟踪,您会看到在class_exists 上触发了错误。该函数默认调用__autoload。这意味着您注册的自动加载器将被调用。在这种情况下,它将为您的项目之外存在的类调用。

因此,在需要文件之前,您应该在自动加载器中添加一个额外的file_exists 检查。您需要一个不存在的文件。

if (file_exists($fileName)) {
    require $fileName;
}

或者只是抑制错误(require 不会抛出异常,所以使用@):

@require $fileName;

【讨论】:

  • 不幸的是,这样的修改会导致我的框架出错。
  • 那么你的文件在指定位置不存在,你依赖include_path?我会说这是不好的做法。无论如何,您也可以尝试包含该文件并在发生错误时抑制错误。
【解决方案2】:

您需要做的就是转到Settings > Language & Frameworks > PHP > PHPUnit 并选择PHPUnit library - 并将路径设置为phpunit.phar,仅此而已。

【讨论】:

  • 这实际上是我必须做的才能让它工作。在 PHPStorm Settings > Languages & Framesworks > PHP >PHPUnit > Test Runner 我删除了对默认配置和引导文件的任何引用。当单个测试文件直接从 PHPStorm 运行时,它就可以工作了。在此之后,我添加了一些真实的测试。这样做需要我在测试文件的顶部有一个“包含”路径,这样我的被测代码就会出现。这是我希望通过使用我自己的自动加载器来避免的事情。我想还需要更多的实验。
  • 好吧,您基本上只是卸下了自动加载器(实际问题出在哪里)。所以这只是一种解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多