处理PHPUnit的路径问题

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会备份您的全局状态,这会大大降低您的测试速度,因此为什么在测试完成后避免任何测试更好.


The*_*her 6

您可以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)

有关其他可能的选项,请参阅官方文档