PHPUnit 在具有 require_once 和 $SERVER 变量的对象构造函数上神秘地失败

PHPUnit Mysteriously Fails On Object Constructor with require_once and $SERVER variable

我正在尝试围绕一个不符合任何 PSR 标准的预先存在的 PHP class 文件包装测试 class。

我要测试的 PHP 对象有一个接受 1 个参数的构造函数。

在 setUp 中准备我的对象时,我的测试正确地失败了,因为缺少构造函数参数。因此,我很高兴我的对象得到了正确的解析。

protected function setUp() {
    $this->object = new HierarchyChange();
}

但是,当我添加一个值时:

$this->object = new HierarchyChange('username');

NetBeans 在我 运行 测试时抛出一条 "Perhaps error occurred, verify in Output window" 消息。而输出window没有任何信息。

从命令行执行 "phpunit . -v" 只会输出我正在使用的 PHPUnit 版本,但不会显示任何异常信息。

我已将 HierarchyChange class 中的失败行跟踪到 class 构造函数中的这一行:

public function __construct($agent_manager)
    {

        /* require contracting base class */
        require_once($_SERVER['DOCUMENT_ROOT'] . '/_inc/oc.class.php');

我尝试了多种不同的方法来添加此文件,认为是服务器变量导致了问题,但即使删除它并在构造函数中对路径进行硬编码也会导致测试套件崩溃。

但是,当我完全注释掉 require_once 行时,它确实有效。

我不明白为什么会失败,但我正在抓住这个问题。谢谢

问题源于以下几点:

  1. PHP.ini 的配置不正确(未引发错误消息),但更重要的是:
  2. 服务器变量设置不正确;我最终修改了 phpunit.xml 配置文件以包括:

由于测试是通过 CLI 执行的,因此这些服务器变量不可用,因此需要对其进行设置。当 phpunit 遇到这个错误时,NetBeans 不知道如何在输出 window 中报告它,因为本地 INI 配置没有设置为这样做。