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

标签 php unit-testing environment-variables gitlab shell-exec

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

相关文章:

php - 连接后保持 PHP 服务器套接字处于事件状态

php - 无法使用 PHP/PDO 在 mySQL DB 上更新/插入

php - iPhone 手机 safari JSON 解析错误

python - Django 测试在数据库创建时卡住

java - Mockito 模拟类返回 Null

c# - ASP.NET 核心 3.1 |如何使用服务集合进行单元测试并使用 NullLogger 作为 ILogger 实现

java - Eclipse 不启动 (Ubuntu) : JVM terminated. 退出代码=2

php - 如何使用 PHP DBA 函数搜索关键字

python - 为什么python中设置的环境变量不能持久化?

linux - 如何使日期命令与自定义指定日期相关?