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


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

我试图将一个测试类封装在一个预先存在的PHP类文件中,该文件不符合任何PSR标准。

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

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

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

然而,当我添加一个值时:

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

当我运行测试时,NetBeans抛出一条"也许发生了错误,在输出窗口中验证"的消息。并且输出窗口没有任何信息。

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

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

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

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

然而,当我完全注释掉require_one行时,它确实有效。

我不明白为什么会失败,但我正在抓住救命稻草。谢谢

问题源于以下几点:

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

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