将变量传递给PhpUnit

时间:2011-12-13 15:08:58

标签: php phpunit

我使用phpunit开发了一组测试用例,用于测试开发站点和生产站点。唯一的区别是域名。如何将域从命令行传递到phpunit测试用例,以便我不需要修改每个文件?

3 个答案:

答案 0 :(得分:12)

phpunit-bootstrap.php中你可以这样做:

$site = getenv('DOMAIN');

并使用

<php>
  <env name="DOMAIN" value="http://production.com"/>
</php>

phpunit.xml档案as shown in the documentation

这种方法的缺点是你需要有两个不同的xml文件。


其他选项是使用围绕phpunit的自定义包装器脚本,如@DavidHarkness所示,这种脚本往往效果不错

或者,如果您不想以自动方式运行这些测试(或使用这两种方法)来执行以下操作:

$site = getenv('DOMAIN');
if(!$site) {
    echo "Enter Domain: ";
    $site = fgets(STDIN);
}

让跑步者检查环境,如果没有任何内容,请询问您的域名。


环境或定义或其他任何

同样适用于php可以从外部世界输入的各种方式。

<php>
  <define name="DOMAIN" value="http://production.com"/>
</php>
例如,

也适用于你使用常量的情况。

答案 1 :(得分:4)

您可以在运行测试之前设置环境变量。为了使自己更容易,创建一个简单的脚本来导出变量并运行测试。

#!/bin/bash

USAGE="Usage: $0 <domain> [file-or-directory]"

if [ "$#" == "0" ]; then
    echo "$USAGE"
    exit 1
fi

export TEST_DOMAIN=$1
shift
phpunit $*

在基本测试用例中,您可以使用getenv

访问此值
$domain = getenv('TEST_DOMAIN');

答案 2 :(得分:0)

我也碰到了这个。使用bash执行此操作的一种方法是导出要传入的ENV变量,并使用;链接phpunit调用,如下所示:

#: HOST_NAME="my.host.com"; phpunit MyTestFile.php

这将创建一个HOST_NAME环境变量,然后立即调用您的单元测试。

然后在测试脚本中,您可以使用以下内容访问HOST_NAME变量:

$host = getenv('HOST_NAME');