【问题标题】:$_SERVER['DOCUMENT_ROOT'] not recognised by php unit$_SERVER['DOCUMENT_ROOT'] php 单元无法识别
【发布时间】:2014-07-11 14:33:49
【问题描述】:

我正在使用 phpunit 为我的代码编写单元测试。代码类有以下内容:

<?

    // Dependencies
    //
    require_once($_SERVER['DOCUMENT_ROOT']."/includes/configs.php");

class xyz{
..
...
..
}
?>

测试类如下:

<?php

require_once("xyz.php");

class testxyz extends PHPUnit_Framework_TestCase{

    public function setUp(){
        $this->xyz= new xyz();
    }

    public function testEmail(){

        $this->xyz->SetEmail('abc');
        $name = $this->xyz->GetEmail();
        $this->assertEquals($name == 'abc');
    }


}

当我在测试类上运行 php 单元时,出现以下错误:

Fatal Error: Class xyz not found

通过在我的代码类顶部给出&lt;?php instead of &lt;? 解决了这个错误。

其次,在解决第一个错误后,我收到以下错误:

Fatal error: require_once(): Failed opening required '/includes/configs.php'.

这意味着 $_SERVER['DOCUMENT_ROOT'] 未被 php 单元识别。

既然无法更改代码类,如何在不更改代码类的情况下成功运行 php 单元。请建议任何解决方法,以便 &lt;?$_SERVER['DOCUMENT_ROOT'] 开始使用 php 单元。

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    $_SERVER['DOCUMENT_ROOT'] 依赖于特定的环境。当您调用 PHPUnit 时,它会在没有该环境的情况下运行 PHP。

    通常,您希望被测代码独立于环境。一个常见的设置是有一个可以从 web 服务器环境和 PHPUnit 环境引导的引导程序。

    如果使用$_SERVER['DOCUMENT_ROOT'],您可以使用魔术常量在引导程序中设置基目录:__FILE____DIR__

    类似于$_SERVER$_GET$_POST$_COOKIE 在 PHPUnit 环境中也不可用。

    【讨论】:

      【解决方案2】:

      您可以在设置方法中手动设置 $_SERVER['DOCUMENT_ROOT']

      public function setUp(){
          $_SERVER['DOCUMENT_ROOT'] = "...";
          $this->xyz= new xyz();
      }
      

      $_SERVER 未设置原因: https://stackoverflow.com/a/2100577/1071156

      【讨论】:

      • 我有一个自定义路径 $_SERVER['PATH_TO_REFERENCED_CODE'] 这不起作用。
      • 谢谢 .. 我在设置中将其设置为 $_SERVER['PWD']
      猜你喜欢
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2011-11-05
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      相关资源
      最近更新 更多