首页 > 解决方案 > PHPUnit:在 TestCase 方法中访问过滤器术语

问题描述

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

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

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

如果我可以访问使用的术语,我可以实现这一点,--filter但我看不出这是否可能。

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

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

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

标签: phpfiltercommand-linephpunit

解决方案


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

这是一个精简的示例:

<?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将运行两个测试套件

推荐阅读