gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:57:54 29 4
gpt4 key购买 nike

我正在对多年前创建的实用程序函数进行一些基本单元测试,但它涉及访问 $_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());
}

注意:我必须使用 set,因为我在 Windows 机器上,而我们的 GitLab Runner 在 Linux 机器上,所以我使用了 exportgitlab-ci.yml 文件上。

我原以为这个测试会通过,但使用 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());
}

关于php - 在 PHP 单元测试中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393375/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com