我使用phpunit开发了一组测试用例,用于测试开发站点和生产站点。唯一的区别是域名。如何将域从命令行传递到phpunit测试用例,以便我不需要修改每个文件?
答案 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');