我正在用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
通过在我的代码类顶部提供<?php instead of <?
来解决此错误。
其次,我在第一次错误解决后得到以下错误:
Fatal error: require_once(): Failed opening required '/includes/configs.php'.
这意味着php单元无法识别$ _SERVER [&#39; DOCUMENT_ROOT&#39;]。
由于代码类无法更改,如何在不更改代码类的情况下成功运行php单元。请建议任何解决方法<?
和$_SERVER['DOCUMENT_ROOT']
开始使用php unit。
答案 0 :(得分:1)
$_SERVER['DOCUMENT_ROOT']
依赖于特定的环境。当你调用PHPUnit时,它运行没有那个环境的PHP。
通常,您希望测试中的代码独立于环境。一个常见的设置是拥有一个可以从Web服务器环境和PHPUnit环境引导的引导程序。
而是使用$_SERVER['DOCUMENT_ROOT']
,您可以使用魔术常量设置引导程序中的基目录:__FILE__
和__DIR__
。
与$_SERVER
类似:$_GET
,$_POST
和$_COOKIE
在PHPUnit环境中也不可用。
答案 1 :(得分:0)
您可以在setUp方法中手动设置$ _SERVER [&#39; DOCUMENT_ROOT&#39;]
public function setUp(){
$_SERVER['DOCUMENT_ROOT'] = "...";
$this->xyz= new xyz();
}
未设置$ _SERVER的原因: https://stackoverflow.com/a/2100577/1071156