我正在对几年前制作的实用程序功能进行一些基本的单元测试,但它涉及访问$_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());
}
注意::我的GitLab Runner在Linux计算机上时,我必须像在Windows计算机上一样使用set
,所以我在{{1 }}文件。
我期望该测试通过,但似乎使用export
设置环境变量的命令根本没有更改该值。我仍然可以从YAML文件中定义的值中获取价值。
这是失败消息:
gitlab-ci.yml
答案 0 :(得分:2)
Any shell command you execute would be a separate process and wouldn't affect the running process.
Since you're unit testing how the function would use the $SERVER
variable, you don't need to go through all the hassle of thinking how it would be set in a "real" scenario - just manually modify it and test your function:
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());
}