phpUnit 中的假 $_SERVER 变量

B. *_*rug 3 php phpunit

我对 phpUnit 还是新手,无法使我的(非常简单的)测试工作。

<?php

use PHPUnit\Framework\TestCase;

class userTest extends TestCase {
    public function testTrue() {
        $this->assertTrue(true);

        //  This line wont work without autloader.php
        $user = new User();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我需要从 autoloader.php 加载所有类:

<?xml version="1.0" encoding="UTF-8"?>
    <phpunit bootstrap="inc/autoload.php"></phpunit>
Run Code Online (Sandbox Code Playgroud)

但我在这些类中有很多 $SERVER 变量,比如

$_SERVER['REMOTE_ADDR']
$_SERVER['HTTPS']
$_SERVER['SERVER_NAME']
$_SERVER['DOCUMENT_ROOT']
$_SERVER['REQUEST_URI']
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Notice: Undefined index: REMOTE_ADDR in /Applications/MAMP/htdocs/sakkadentrainer/classes/App.php on line 674
Run Code Online (Sandbox Code Playgroud)

我怎样才能让这些变量发挥作用?我更喜欢将它们“伪造”为 phpunit.xml 文件中的 env.variables,但我不知道这是否可能。

谢谢你的帮助!

我的设置:php 7.1.2、phpUnit 6.1.1、macOs Mojave、MAMP

解决方案https://phpunit.de/manual/6.5/en/appendixes.configuration.html#appendixes.configuration.php-ini-constants-variables

Mat*_*teo 6

参考文档,您可以设置 PHP INI 设置、常量和全局变量,例如:

<php>
  <server name="REMOTE_ADDR" value="127.0.0.1"/>
</php>
Run Code Online (Sandbox Code Playgroud)

希望这有帮助