PHPUnit中默认运行单个测试套件

16

我的PHPUnit配置文件有两个测试套件:unitsystem。当我运行测试运行器vendor/bin/phpunit时,它会在两个套件中运行所有测试。我可以使用testsuite标记指定一个单独的测试套件:vendor/bin/phpunit --testsuite unit,但我需要配置测试运行器默认只运行unit套件,并且仅在使用testsuite标记时才运行integration

我的配置:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
  <testsuites>
    <testsuite name="unit">
      <directory>tests/Unit</directory>
    </testsuite>
    <testsuite name="integration">
      <directory>tests/Integration</directory>
    </testsuite>
  </testsuites>
  <filter>
    <whitelist>
      <directory suffix=".php">src</directory>
    </whitelist>
  </filter>
  <logging>
    <log type="coverage-clover" target="build/clover.xml"/>
  </logging>
</phpunit>

创建phpunit_unit.shphpunit_integration.sh两个文件,并将相关配置写在其中,这样不会更好吗? - Felippe Duarte
有没有找到反向问题的答案?有没有一种方法可以运行一些测试,而不是默认情况下运行测试 - 比如运行大量长时间运行的升级脚本测试?所以这些必须包含在内。 - Alec Teal
我可能稍后会有一个关于“替代”方式的答案,这是我通常更喜欢的方式...答案(即使是被接受的答案)也相当复杂。你认为这很重要吗?还是不值得打字? - Alec Teal
2个回答

29

PHPUnit 6.1.0 版本起,现在支持 defaultTestSuite 属性。

请查看 https://github.com/sebastianbergmann/phpunit/pull/2533

这可以与其他 phpunit 属性一起使用,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.2/phpunit.xsd"
         backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="tests/bootstrap.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         defaultTestSuite="unit"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="unit">
            <directory suffix="Test.php">tests/Unit</directory>
        </testsuite>
        <testsuite name="integration">
            <directory suffix="Test.php">tests/Integration</directory>
        </testsuite>
    </testsuites>
</phpunit>

现在您可以运行phpunit而不是phpunit --testsuite unit
测试套件的名称可能是大小写敏感的,所以请注意。

在撰写本文时(2019年7月),这将需要很长时间才能过滤到大多数用户,最好只使用组和至少一个README,或者有其他东西运行测试(并检测是否未使用,而是说“运行[要复制和粘贴的内容]”)。虽然我不知道有多少用户在使用它,但我检查的3个“流行”事物中最近的一个是3.7.something(28?)-显然内部用户将了解他们的目标。但是,如果可能的话,请暂时不要使用此功能。 - Alec Teal

3

似乎没有一种方法可以从phpunit.xml文件中列出多个测试套件,然后只运行一个。但是,如果您对更完整的集成和测试环境有一定的控制权,可以拥有多个phpunit配置文件,并设置一个(或多个)具有更复杂环境的phpunit配置文件,以使用配置来执行更多任务的命令行参数--configuration <file>选项。这至少可以确保最简单的配置以最简单的方式运行。

如果您特别运行它们,则这两个文件可以随意命名,但是考虑将快速运行的文件称为默认的phpunit.xml,并将具有特定名称和扩展文件的文件称为phpunit.xml.dist如果原始的纯.xml不存在,则会自动运行.dist文件。另一个选项是在代码库中拥有phpunit.xml.dist文件,但是将其复制到不在版本控制中的具有较少测试套件的phpunit.xml文件中,并仅在本地保存(它可能也被标记为在.gitignore文件或类似文件中被忽略)。


2
PHPUnit(自6.1.0版本起)现在支持定义默认测试套件,因此不再需要使用此解决方法。 - GaryJ
@GaryJ:提供至少一个来源链接会更加友好。但是非常感谢您的评论和版本号 :) /E: 哦,刚看到您在下面的答案中已经提供了。 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接