繁体   English   中英

在 PHP 单元测试中设置环境变量

[英]Setting environment variables inside PHP unit tests

我正在对多年前创建的实用程序函数进行一些基本的单元测试,但它涉及访问$_SERVER数组。

由于我的单元测试是从命令行运行的,因此我必须自己手动设置数组的值。

这在使用 GitLab Runners 时效果很好,因为在.gitlab-ci.yml文件中,我只是执行以下操作:

before_script:
  - export SERVER_PORT="80"
  - export SERVER_NAME="gitlab"

我的测试目前无法测试该函数的所有语句,因为它会检查$_SERVER['SERVER_NAME']值。

单元测试

public function testGetEnvironment() {
    shell_exec('set SERVER_NAME="localhost"');
    $this->assertEquals("localhost", $this->util->get_environment());

    shell_exec('set SERVER_NAME="gitlab"');
    $this->assertEquals("gitlab", $this->util->get_environment());
}

注意:我必须像在 Windows 机器上一样使用set ,而我们的 GitLab Runner 在 Linux 机器上,所以我在gitlab-ci.yml文件上使用了export

我期待这个测试通过,但似乎使用shell_exec设置环境变量的命令根本没有改变值。 我仍然从 YAML 文件中定义的值中获取值。

更新

这是失败消息:

1) UtilTest::testGetEnvironment
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'localhost'
+'gitlab'

您执行的任何 shell 命令都将是一个单独的进程,不会影响正在运行的进程。 由于您正在对函数如何使用$_SERVER变量进行单元测试,因此您无需考虑如何在“真实”场景中设置它的所有麻烦——只需手动修改它并测试您的函数:

public function testGetEnvironment() {
    $_SERVER["SERVER_NAME"] = "localhost";
    $this->assertEquals("localhost", $this->util->get_environment());

    $_SERVER["SERVER_NAME"] = "gitlab";
    $this->assertEquals("gitlab", $this->util->get_environment());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM