我的PHPUnit配置文件有两个测试套件,unit
和system
。当我运行测试运行器vendor/bin/phpunit
时,它会在两个套件中运行所有测试。我可以使用testsuite
标记vendor/bin/phpunit --testsuite unit
来定位单个套件,但我需要将测试运行器配置为默认情况下仅运行unit
套件,并运行integration
只有在使用testsuite标志专门调用时才会使用。
我的配置:
<?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>
答案 0 :(得分:16)
自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
。
测试套件的名称可能区分大小写,因此请注意。
答案 1 :(得分:2)
似乎没有办法从phpunit.xml文件列出多个测试套件,但只运行一个。但是,如果您确实可以控制更完整的集成和测试环境,您可以更精确地配置事物,那么您可以拥有多个phpunit配置文件,并设置一个(或多个)更复杂的环境来设置命令行参数--configuration <file>
选项,其配置可以执行更多操作。这至少可以确保最简单的配置以最简单的方式运行。
如果您专门运行这两个文件,可以随意调用这两个文件,但是可能值得考虑将快速运行的文件称为默认phpunit.xml
,并将具体命名和扩展的文件作为phpunit.xml.dist
。 如果原始普通.xml
不存在,默认情况下会自动运行.dist文件。另一种选择是将phpunit.xml.dist
文件放在代码存储库中,然后将其复制到phpunit.xml
文件中,使用较少的测试套件,这本身不检查版本控制,并且只保存在本地(它可能也会在.gitignore文件或类似文件中被标记为忽略。