在命令行上将参数发送到PHP单元

Yah*_*din 2 php phpunit

我想使用命令行向PHP单元发送一个参数.

例如

./phpunit --foo='bar' AllTests
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我能够达到目标的最接近的是使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <php>
        <env name="foo" value="bar"/>
    </php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

然后我可以使用访问变量$_ENV['foo'].

但是,我想使用命令行发送此变量.

BVe*_*rov 11

使用phpunit.xml显然是恒定的环境变量,并用它来传递参数更改为测试是一个有点开销.

您可以做的是以下之一(请参阅将参数传递给PHPUnit进行讨论):

使用设置环境变量作为命令

例: FOO=bar ./phpunit AllTests

优点:琐碎.

缺点:取决于环境; 需要记住变量的名称(如果有很多则不是那么简单); 没有关于支持/必要参数的明显文档.

使用$ argv传递参数并在测试中使用它们.

例: ./phpunit AllTests bar

优点:琐碎; 独立于环境; PHPUnit参数没有限制.

缺点:如果有多个参数,将会很痛苦,特别是如果它们中的大多数是可选的; 预期参数没有明显的文档.

使用您自己的跑步者脚本/功能设置环境变量(然后运行测试)

例如: . run.sh AllTests bar其中,run.sh在提供的参数看起来并出口到环境中.

优点:实施起来或多或少都是微不足道的; 添加预期参数列表的文档; 添加错误处理(例如,如果bar是必需参数,但未提供).

缺点:跑步者内部的PHPUnit参数是硬编码的; 依赖于环境.

fork PHPUnit并在扩展命令解析器中实现您自己支持的参数

例: ./phpunit --foo='bar' AllTests

优点:完全符合您的要求.

缺点:实施起来不是那么简单; 需要分叉,这使得它强烈依赖于当前PHPUnit版本的CLI.

用自己的命令解析器编写自己的运行程序

示例: run.sh --foo=bar --coverage-html=baz where run.sh调用其中一些run.php反过来通过解析器运行命令参数,构建运行测试的命令并执行此操作.

优点:现在你可以做任何你喜欢的事情并添加你需要的任何参数.您可以实现自己的记录器,可以在多线程中运行测试等.

缺点:难以实施; 有时需要维护; 强烈依赖于PHPUnit CLI.

  • 在命令行上简单传递参数的选项似乎已在某些时候被删除 - 使用最新的 phpunit 版本运行“./phpunit AllTests bar”将导致错误消息“找不到文件栏”... (2认同)

Hon*_*ing 5

您可以运行设置了环境变量的任何命令:

foo=bar ./phpunit AllTests