我正在尝试为无法进行大量代码更改的应用程序编写单元测试。代码库中的几乎所有.php文件都使用一些$ _SERVER ['']变量,如
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
所以现在当我必须编写并运行PHPUnit测试用例时,我必须以某种方式设置这些变量。 目前我正在用户环境中设置这些变量然后执行
$_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 build文件设置这些变量,或者在通过Jenkins执行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>
但它不起作用。我可以为此做任何设置吗? 谢谢!
答案 0 :(得分:6)
我不确定#1,但PHPUnit本身必须支持它。我没有看到通过命令行做任何方法。但是,如果您将当前的解决方法放入bootstrap.php
,则无需在每次测试中执行此操作。
对于#2,<exec>
允许您使用嵌套的<env>
元素设置环境变量。我在Jenkins中使用它。
<exec executable="phpunit" ...>
<env key="DOCUMENT_ROOT" value="/var/www/php"/>
</exec>
更新:您通常创建bootstrap.php
以设置将源目录添加到包含路径并根据需要初始化测试环境。 PHPUnit不提供此文件 - 与phpunit.xml
不同。
我将它放在与phpunit.xml
相同的目录中,但那是因为我为每个项目都有一个单独的文件。它通常位于保存测试的目录中。这允许您从命令行运行phpunit
,而不告诉它如何查找这些配置文件。否则,您必须使用--bootstrap
和/或--configuration
指向它们。
以下是我如何构建典型项目:
<project-root>/
build.xml
src/
MyClass.php
test/
MyClassTest.php
phpunit.xml
bootstrap.php