Jer*_*rpe 11 php testing phpunit unit-testing include
我刚刚开始使用PHPUnit,但我遇到了一些麻烦.
我的代码使用$ _SERVER ['DOCUMENT_ROOT']计算包含的路径,当我的apache服务器是运行PHP的服务器时,它运行,但是当我从命令行运行带有"phpunit Tests"的phpunit时,没有设置DOCUMENT_ROOT,所以这些包括不工作.
我在PHPUnit的配置中遗漏了什么?它应该以某种方式与apache集成吗?
pin*_*hic 13
迟到的回答,对不起.
不,你没有遗漏任何东西.PHP CLI(用于命令行的PHP)是一种与PHP不同的野兽,作为Apache/CGI模块.
您可以做的setUp()是将文件更改为您需要的文件$_SERVER['DOCUMENT_ROOT'](因为$_SERVER即使在CLI上下文中仍然可以作为超级全局使用),例如:
public function setUp() {
$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../application";
}
Run Code Online (Sandbox Code Playgroud)
要小心,你可能想把它放到你的tearDown():
public function tearDown() {
unset($_SERVER['DOCUMENT_ROOT']);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用全局(也包括超全局)数据,PHPUnit会备份您的全局状态,这会大大降低您的测试速度,因此为什么在测试完成后避免任何测试更好.
您可以phpunit.xml在以下部分中直接设置其他变量(无论如何您将在某个时候使用),而不是将 hacks 注入生产代码或测试代码php:
<phpunit bootstrap="vendor/autoload.php">
<php>
<server name="DOCUMENT_ROOT" value="wwwroot" />
<server name="SERVER_NAME" value="localhost" />
<const name="PHPUNIT_TESTSUITE" value="true"/>
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
有关其他可能的选项,请参阅官方文档