【问题标题】:Send parameter to PHP Unit on the command line在命令行向 PHP 单元发送参数
【发布时间】:2017-02-01 05:52:58
【问题描述】:

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

例如

./phpunit --foo='bar' AllTests

我该怎么做?

我能够实现目标的最接近的方法是使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <php>
        <env name="foo" value="bar"/>
    </php>
</phpunit>

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

但是,我想使用命令行发送这个变量。

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    使用phpunit.xml 显然是用于常量环境变量,使用它来将变化的参数传递给测试有点开销。

    您可以执行以下操作之一(请参阅Passing parameters to PHPUnit 进行讨论):

    使用设置环境变量的命令

    例子: FOO=bar ./phpunit AllTests

    优点:微不足道。

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

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

    例子: ./phpunit AllTests bar

    优点:微不足道;独立于环境;对 PHPUnit 参数没有限制。

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

    使用您自己的运行脚本/函数设置环境变量(然后运行测试)

    示例: . run.sh AllTests bar 其中run.sh 查看提供的参数并将它们导出到环境中。

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

    缺点: runner 内部的 PHPUnit 参数是硬编码的;取决于环境。

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

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

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

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

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

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

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

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

    【讨论】:

    • 在命令行中简单地传递参数的选项似乎已在某些时候被删除 - 使用最新的 phpunit 版本运行 ./phpunit AllTests bar 将导致错误消息“找不到文件栏”。 .
    【解决方案2】:

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

    foo=bar ./phpunit AllTests

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多