将变量传递给PhpUnit

cut*_*CAT 9 php phpunit

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

edo*_*ian 12

在你的phpunit-bootstrap.php你可以做这样的事情:

$site = getenv('DOMAIN');
Run Code Online (Sandbox Code Playgroud)

并使用

<php>
  <env name="DOMAIN" value="http://production.com"/>
</php>
Run Code Online (Sandbox Code Playgroud)

在您的phpunit.xml文件中,如文档中所示.

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


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

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

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

并让跑步者检查环境,如果没有,请问你的域名.


环境或定义或其他任何东西

几乎所有PHP都可以从外部世界输入的方式.

<php>
  <define name="DOMAIN" value="http://production.com"/>
</php>
Run Code Online (Sandbox Code Playgroud)

例如,如果您正在使用常量,也可以使用它.


Dav*_*ess 4

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

#!/bin/bash

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

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

export TEST_DOMAIN=$1
shift
phpunit $*
Run Code Online (Sandbox Code Playgroud)

在您的基本测试用例中,您可以使用以下方法访问该值getenv

$domain = getenv('TEST_DOMAIN');
Run Code Online (Sandbox Code Playgroud)