【问题标题】:PhpUnit - group exclusion settings from bootstrap.phpPhpUnit - bootstrap.php 中的组排除设置
【发布时间】:2014-04-15 00:24:06
【问题描述】:

我目前有多个测试运行器,它们仅在工作目录中彼此不同。它们都使用相同的 bootstrap.php 来配置类自动加载。我最近在我的测试中添加了测试组注释,并根据 PHP 版本排除了测试。目前,我在 php 5.4 下添加了测试运行器选项,例如 --exclude-group closure-binding,但对于那些我必须复制每个测试运行器并手动设置选项。我认为如果我可以对 bootstrap.php 添加修改并从那里设置组排除会更好。有没有办法做到这一点?

(phpunit 3.7.x 版)

【问题讨论】:

    标签: php phpunit bootstrapping


    【解决方案1】:

    不要认为你可以在 bootstrap.php 上做到这一点,但你可以使用不同的 XML 配置文件,具有不同的组配置(从 docs 复制的示例):

    File: closure-binding.xml
    
    <groups>
      <include>
        <group>whatever</group>
      </include>
      <exclude>
        <group>closure-binding</group>
      </exclude>
    </groups>
    
    phpunit -c closure-binding.xml
    

    这是你需要的吗?

    【讨论】:

    • 不,这不是依赖于 PHP 版本的配置...应该是这样的:if (php version &lt; 5.4) then exclude(closure-binding);.
    • 想一想,xml方案只是给phpunit命令传递--exclude-group参数的一个别名,所以就算再方便一些,也不是你要的。
    • 是的,我必须以某种方式从引导文件重新配置 phpunit 组。另一种编写bash脚本来设置依赖于php版本的排除组的选项,但我不知道它是否与我的IDE兼容......
    【解决方案2】:

    According to Sebastian,这是不可能的,我必须用@requires annotation代替那个。

    注意:@requires 注释运行良好,但由于在较低版本中使用了yield::class,我总是遇到解析错误......所以我最终不在乎这个,但是我会保留注释。也许以后我会写一个项目,它可以根据注解和php版本自动注释掉测试代码。

    如果代码不能被旧的 php 版本解析,你必须将它移动到单独的文件中,给它们适当的后缀并设置一个配置 xml 文件,如下所示:

        <testsuite name="unit tests">
            <directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">test/unit</directory>
            <directory suffix="Test54.php" phpVersion="5.4.0" phpVersionOperator=">=">test/unit</directory>
            <directory suffix="Test55.php" phpVersion="5.5.0" phpVersionOperator=">=">test/unit</directory>
        </testsuite>
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2011-12-26
      • 2014-12-04
      相关资源
      最近更新 更多