我正在尝试为一个应用程序编写单元测试,但很多代码更改都不可行。代码库中几乎所有的 .php 文件都使用了一些 $_SERVER[''] 变量,例如:
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
现在当我需要编写和运行PHPUnit测试用例时,我必须以某种方式设置这些变量。目前我是在用户环境中设置这些变量,然后执行。
所需翻译内容为: "So now when I have to write and run PHPUnit test cases I have to somehow set these variables. At present I am setting these variables in the user environment and then doing"
$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT');
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
获取服务器变量的方法很好用。我通过命令行运行我的测试,如:$ phpunit test.php
。
问题1:在通过命令行运行phpunit测试时,是否可以设置$_SERVER变量?
我还必须通过Jenkins运行这些单元测试,但我无法通过ANT/build文件设置这些服务器变量。
问题2:在Jenkins中的ANT构建文件或在执行phpunit测试之前运行任何shell脚本来设置这些变量是否有可能?
我尝试通过shell脚本导出服务器变量。
export DOCUMENT_ROOT=/server/path-to-root-dir
并在Jenkins的build.xml中调用该脚本。
<export name="setEnv" description="set server var">
<exec executable="sh">
<arg value = "sumit.sh" />
</exec>
</target>
但它并没有起作用。我是否可以进行任何设置以解决这个问题? 谢谢!
$_SERVER['DOCUMENT_ROOT']
?您的方法<env key="DOCUMENT_ROOT" value="/path" />
完全正常,但是我的代码中有很多 SERVER 变量,我将不得不在一个 PHP 文件中编写所有的$_SERVER[] = getenv()
并且必须在所有测试类中导入该文件。有没有办法可以减少这个过程? - Sumitkbootstrap.php
中完成分配,PHPUnit 在运行任何测试之前自动加载它。将文件放置在测试根目录下的目录中,或使用--bootstrap
命令行参数将其指向 PHPUnit。 - David Harknessbootstrap.php
文件是我们需要和测试文件一起创建的,还是PHPUnit自带的?因为我在我的系统上找不到它。如果我们需要创建它,应该放在哪里?与所有测试文件一起还是与phpunit.xml.dist
放在一起? - Sumitk