将变量传递给PhpUnit

9

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


2
测试能否从某种配置文件中加载它? - Mārtiņš Briedis
3个回答

12

在你的phpunit-bootstrap.php文件中,你可以这样做:

$site = getenv('DOMAIN');

并使用

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

按照文档中所示,在您的phpunit.xml文件中进行设置。

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


其他选项是像@DavidHarkness展示的那样,使用围绕phpunit的自定义包装脚本,这通常效果很好。

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

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

并且让运行程序检查环境,如果没有设置则要求您提供域名。


环境变量或定义或其他任何方式

对于 PHP 从外部获取输入的几乎每种方式都是如此。

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

对于使用常量的情况,同样也适用,例如:


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');

0

我也遇到了这个问题。你可以使用 bash 导出想要传递的环境变量,并使用 ; 链接 phpunit 调用,例如:

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

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

然后在您的测试脚本中,您可以使用类似以下方式访问HOST_NAME变量:

$host = getenv('HOST_NAME');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接