PHPUnit:在 TestCase 方法中访问过滤器术语

PHPUnit: Accessing the filter term within a TestCase method

我似乎无法在任何地方找到这个问题的答案,但它可能就在我面前(通常是)。

对于我的项目:使用 PHPUnit,我在几个文件中进行了很多测试,但是有一些测试(故意)需要很长时间才能完成 运行,所以我将它们标记为 'skipped' 默认。

我想要的是 运行 我的所有测试(除了跳过的测试)使用默认命令行指令的方法,但是如果过滤器术语专门用于跳过的测试,那么只有这些测试是 运行,(或者它们包含在主要 运行 中)并且跳过的指令被忽略。

如果我可以访问 --filter 中使用的术语,我就可以做到这一点,但我不知道这是否可行。

我知道我可以使用测试套件并且很可能必须切换到该范例,但如果可能的话,那么我更愿意这样做,因为这意味着我可以使用默认测试命令 99 % 的时间,而不是每次都必须指定套件。

作为参考,我有我的 test 命令作为别名(到 project\vendor\bin\phpunit),这有助于快速指令。

不幸的是,设置 @group 值并在默认别名 ( project\vendor\bin\phpunit --exclude-group ) 中使用它,然后使用 $ test --group 不起作用(这两个参数相互抵消) .

我想最简单的方法是将测试分成两个测试套件。当您在 XML 配置中设置 defaultTestSuite 属性时,您不必在 运行 执行 test 命令时指定测试套件。如果你想 运行 其他套件,你可以使用 --testsuite 选项。

这是一个 stripped-down 示例:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit defaultTestSuite="unit" /* ... */>
    <testsuites>
        <testsuite name="unit">
            <directory>tests/Unit</directory>
        </testsuite>
        <testsuite name="functional">
            <directory>tests/Functional</directory>
        </testsuite>
    </testsuites>

    <!-- ... -->
</phpunit>
  • phpunit 将 运行 unit 测试套件
  • phpunit --testsuite=functional 将 运行 functional 测试套件
  • phpunit --testsuite=unit,functional 将 运行 两个测试套件