我正在对我几年前编写的一个实用程序函数进行基本单元测试,但它涉及访问$_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机器,而我们的GitLab Runner是在Linux机器上,所以我必须使用set
命令并在gitlab-ci.yml
文件中使用export
命令。
我本来期望这个测试能通过,但似乎使用shell_exec
命令设置环境变量并没有改变它的值。我仍然得到了从YAML文件中定义的值。
更新
下面是失败信息:
1) UtilTest::testGetEnvironment
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'localhost'
+'gitlab'