5. The XML Configuration File

<phpunit> Element

backupGlobals Attribute

Possible values: true 或者 false (default: false

PHPUnit can optionally backup all global and super-global variables before each test and restore this backup after each test.

This attribute configures this operation for all tests. This configuration can be overridden using the @backupGlobals annotation on the test case class and test method level.

backupStaticProperties Attribute

Possible values: true 或者 false (default: false

PHPUnit can optionally backup all static properties in all declared classes before each test and restore this backup after each test.

This attribute configures this operation for all tests. This configuration can be overridden using the BackupStaticProperties attribute on the test case class and test method level.

bootstrap Attribute

This attribute configures the bootstrap script that is loaded before the tests are executed. This script usually only registers the autoloader callback that is used to load the code under test.

cacheDirectory Attribute

This attribute configures the directory in which PHPUnit caches information such as test results (see below) or the result of static code analysis that is performed for code coverage reporting.

cacheResult Attribute

Possible values: true 或者 false (default: true

This attribute configures the caching of test results. This caching is required for ordering tests by defects or duration with the executionOrder attribute (see The executionOrder Attribute )。

colors Attribute

Possible values: true 或者 false (default: false

This attribute configures whether colors are used in PHPUnit’s output.

Setting this attribute to true is equivalent to using the --colors=auto CLI option.

Setting this attribute to false is equivalent to using the --colors=never CLI option.

columns Attribute

Possible values: integer or string max (default: 80

This attribute configures the number of columns to use for progress output.

如果 max is defined as value, the number of columns will be maximum of the current terminal.

controlGarbageCollector Attribute

Possible values: true 或者 false (default: false

When the PHP runtime automatically performs garbage collection then this may happen in the middle of the preparation (fixture setup) of a test or in the middle of the execution of a test. This can have a negative impact on test execution performance.

Configuring controlGarbageCollector="true" has the following effects:

  • Deactivate automatic garbage collection using gc_disable() before the first test is run

  • Trigger garbage collection using gc_collect_cycles() before the first test is run

  • Trigger garbage collection using gc_collect_cycles() after each n-th test

  • Trigger garbage collection after using gc_collect_cycles() after the last test was run

  • Activate automatic garbage collection using gc_enable() after the last test was run

The number of tests to execute before garbage collection is triggered is controlled by numberOfTestsBeforeGarbageCollection (see below).

numberOfTestsBeforeGarbageCollection Attribute

Possible values: integer (default: 100

Configures the number of tests to execute before garbage collection is triggered (see above).

requireCoverageMetadata Attribute

Possible values: true 或者 false (default: false

This attribute configures whether a test will be marked as risky (see Unintentionally Covered Code ) when it does not indicate the code it intends to cover using an attribute in code or an annotation in a code comment.

processIsolation Attribute

Possible values: true 或者 false (default: false

This attribute configures whether each test should be run in a separate PHP process for increased isolation.

stopOnDefect Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after the first error, failure, warning, or risky test.

stopOnError Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after the first error.

stopOnFailure Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after the first failure.

stopOnWarning Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after the first test warning.

stopOnRisky Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after the first risky test.

stopOnDeprecation Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after first test that triggered a deprecation ( E_DEPRECATED , E_USER_DEPRECATED , or PHPUnit deprecation).

stopOnNotice Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after first test that triggered a notice ( E_STRICT , E_NOTICE , 或者 E_USER_NOTICE )。

stopOnSkipped Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after first skipped test.

stopOnIncomplete Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the test suite execution should be stopped after first incomplete test.

failOnEmptyTestSuite Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when the configured test suite is empty.

failOnWarning Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that had warnings.

failOnRisky Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that were marked as risky.

failOnDeprecation Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that triggered a deprecation ( E_DEPRECATED , E_USER_DEPRECATED , or PHPUnit deprecation).

failOnNotice Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that triggered a notice ( E_STRICT , E_NOTICE , 或者 E_USER_NOTICE )。

failOnSkipped Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that were marked as skipped.

failOnIncomplete Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the PHPUnit test runner should exit with a shell exit code that indicates failure when all tests are successful but there are tests that were marked as incomplete.

beStrictAboutChangesToGlobalState Attribute

Possible values: true 或者 false (default: false

This attribute configures whether PHPUnit should mark a test as risky when global state is manipulated by the code under test (or the test code).

beStrictAboutOutputDuringTests Attribute

Possible values: true 或者 false (default: false

This attribute configures whether PHPUnit should mark a test as risky when the code under test (or the test code) prints output.

beStrictAboutTestsThatDoNotTestAnything Attribute

Possible values: true 或者 false (default: true

This attribute configures whether PHPUnit should mark a test as risky when no assertions are performed (expectations are also considered).

beStrictAboutCoverageMetadata Attribute

Possible values: true 或者 false (default: false

This attribute configures whether PHPUnit should mark a test as risky when it executes code that is not specified to be covered or used using an attribute in code or an annotation in a code comment.

enforceTimeLimit Attribute

Possible values: true 或者 false (default: false

This attribute configures whether time limits should be enforced.

defaultTimeLimit Attribute

Possible values: integer (default: 0

This attribute configures the default time limit (in seconds).

timeoutForSmallTests Attribute

Possible values: integer (default: 1

This attribute configures the time limit for tests annotated with @small (in seconds).

timeoutForMediumTests Attribute

Possible values: integer (default: 10

This attribute configures the time limit for tests annotated with @medium (in seconds).

timeoutForLargeTests Attribute

Possible values: integer (default: 60

This attribute configures the time limit for tests annotated with @large (in seconds).

defaultTestSuite Attribute

This attribute configures the name of the default test suite.

stderr Attribute

Possible values: true 或者 false (default: false

This attribute configures whether PHPUnit should print its output to stderr 代替 stdout

reverseDefectList Attribute

Possible values: true 或者 false (default: false

This attribute configures whether tests that are not successful should be printed in reverse order.

registerMockObjectsFromTestArgumentsRecursively Attribute

Possible values: true 或者 false (default: false

This attribute configures whether arrays and object graphs that are passed from one test to another using the @depends annotation should be recursively scanned for mock objects.

extensionsDirectory Attribute

什么时候 phpunit.phar is used then this attribute may be used to configure a directory from which all *.phar files will be loaded as extensions for the PHPUnit test runner.

executionOrder Attribute

Possible values: default , defects , depends , no-depends , duration , random , reverse , size (default: default

Using multiple values is possible. These need to be separated by ,

This attribute configures the order in which tests are executed.

  • default : ordered as PHPUnit found the tests

  • defects : ordered by defect (errored, failed, warning, incomplete, risky, skipped, unknown, passed), requires enabled result cache

  • depends : ordered by dependency (tests without dependencies first, dependent tests last)

  • depends,defects : ordered by dependency first, then ordered by defects

  • depends,duration : ordered by dependency first, then ordered by duration

  • depends,random : ordered by dependency first, then ordered randomly

  • depends,reverse : ordered by dependency first, then ordered in reverse

  • duration : ordered by duration (fastest test first, slowest test last), requires enabled result cache

  • no-depends : not ordered by dependency

  • no-depends,defects : not ordered by dependency, then ordered by defects

  • no-depends,duration : not ordered by dependency, then ordered by duration

  • no-depends,random : not ordered by dependency, then ordered randomly

  • no-depends,reverse : not ordered by dependency, then ordered in reverse

  • no-depends,size : not ordered by dependency, then ordered by size

  • random : ordered randomly

  • reverse : ordered as PHPUnit found the tests, then ordered in reverse

  • size : ordered by size (small, medium, large, unknown), also see (see @small , @medium , 和 @large

resolveDependencies Attribute

Possible values: true 或者 false (default: true

This attribute configures whether dependencies between tests (expressed using the @depends annotation) should be resolved.

testdox Attribute

Possible values: true 或者 false (default: false

This attribute configures whether the output should be printed in TestDox format.

displayDetailsOnIncompleteTests Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on incomplete tests should be printed.

displayDetailsOnSkippedTests Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on skipped tests should be printed.

displayDetailsOnTestsThatTriggerDeprecations Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on tests that triggered deprecations should be printed.

displayDetailsOnTestsThatTriggerErrors Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on tests that triggered errors should be printed.

displayDetailsOnTestsThatTriggerNotices Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on tests that triggered notices should be printed.

displayDetailsOnTestsThatTriggerWarnings Attribute

Possible values: true 或者 false (default: false

This attribute configures whether details on tests that triggered warnings should be printed.

<testsuites> Element

Parent element: <phpunit>

This element is the root for one or more <testsuite> elements that are used to configure the tests that are to be executed.

<testsuite> Element

Parent element: <testsuites>

A <testsuite> element must have a name attribute and may have one or more <directory> and/or <file> child elements that configure directories and/or files, respectively, that should be searched for tests.

<testsuites>
  <testsuite name="unit">
    <directory>tests/unit</directory>
  </testsuite>

  <testsuite name="integration">
    <directory>tests/integration</directory>
  </testsuite>

  <testsuite name="edge-to-edge">
    <directory>tests/edge-to-edge</directory>
  </testsuite>
</testsuites>

使用 phpVersionphpVersionOperator attributes, a required PHP version can be specified:

<testsuites>
  <testsuite name="unit">
    <directory phpVersion="8.0.0" phpVersionOperator=">=">tests/unit</directory>
  </testsuite>
</testsuites>

In the example above, the tests from the tests/unit directory are only added to the test suite if the PHP version is at least 8.0.0. The phpVersionOperator attribute is optional and defaults to >=

<source> Element

Parent element: <phpunit>

Configures the project’s source code files. This is used to restrict code coverage analysis and reporting of deprecations, notices, and warnings to your own code, for instance, while excluding code from third-party dependencies.

<include> Element

Parent element: <source>

Configures a set of files to be included in the list of the project’s source code files.

<include>
    <directory suffix=".php">src</directory>
</include>

The example shown above instructs PHPUnit to include all source code files with .php suffix in the src directory and its sub-directories.

<exclude> Element

Parent element: <source>

Configures a set of files to be excluded from the list of the project’s source code files.

<include>
    <directory suffix=".php">src</directory>
</include>

<exclude>
    <directory suffix=".php">src/generated</directory>
    <file>src/autoload.php</file>
</exclude>

The example shown above instructs PHPUnit to include all source code files with .php suffix in the src directory and its sub-directories, but to exclude all files with .php suffix in the src/generated directory and its sub-directories as well as the src/autoload.php 文件。

<directory> Element

Parent elements: <include> , <exclude>

Configures a directory and its sub-directories for inclusion in or exclusion from the list of the project’s source code files.

prefix Attribute

Possible values: string

Configures a prefix-based filter that is applied to the names of files in the directory and its sub-directories.

suffix Attribute

Possible values: string (default: '.php'

Configures a suffix-based filter that is applied to the names of files in the directory and its sub-directories.

<file> Element

Parent elements: <include> , <exclude>

Configures a file for inclusion in or exclusion from the list of the project’s source code files.

<restrictDeprecations> Attribute

Possible values: true 或者 false (default: false

Restricts the reporting of E_DEPRECATEDE_USER_DEPRECATED errors 到 list of the project’s source code files.

<restrictNotices> Attribute

Possible values: true 或者 false (default: false

Restricts the reporting of E_STRICT , E_NOTICE , 和 E_USER_NOTICE errors 到 list of the project’s source code files.

<restrictWarnings> Attribute

Possible values: true 或者 false (default: false

Restricts the reporting of E_WARNINGE_USER_WARNING errors 到 list of the project’s source code files.

<baseline> Attribute

Possible values: string

The baseline file to be used when running the test suite.

<ignoreSuppressionOfDeprecations> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_USER_DEPRECATED errors

<ignoreSuppressionOfPhpDeprecations> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_DEPRECATED errors

<ignoreSuppressionOfErrors> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_USER_ERROR errors

<ignoreSuppressionOfNotices> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_USER_NOTICE errors

<ignoreSuppressionOfPhpNotices> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_STRICTE_NOTICE errors

<ignoreSuppressionOfWarnings> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_USER_WARNING errors

<ignoreSuppressionOfPhpWarnings> Attribute

Possible values: true 或者 false (default: false

Ignore the suppression (using the @ operator) of E_WARNING errors

<coverage> Element

Parent element: <phpunit>

<coverage> element and its children can be used to configure code coverage:

<coverage includeUncoveredFiles="true"
          pathCoverage="false"
          ignoreDeprecatedCodeUnits="true"
          disableCodeCoverageIgnore="true">
    <!-- ... -->
</coverage>

includeUncoveredFiles Attribute

Possible values: true 或者 false (default: true

When set to true , all source code files that are configured to be considered for code coverage analysis will be included in the code coverage report(s). This includes source code files that are not executed while the tests are running.

ignoreDeprecatedCodeUnits Attribute

Possible values: true 或者 false (default: false

This attribute configures whether code units annotated with @deprecated should be ignored from code coverage.

pathCoverage Attribute

Possible values: true 或者 false (default: false

When set to false , only line coverage data will be collected, processed, and reported.

When set to true , line coverage, branch coverage, and path coverage data will be collected, processed, and reported. This requires a code coverage driver that supports path coverage. Path Coverage is currently only implemented by Xdebug.

disableCodeCoverageIgnore Attribute

Possible values: true 或者 false (default: false

This attribute configures whether metadata to ignore code should be ignored.

<report> Element

Parent element: <coverage>

Configures the code coverage reports to be generated.

<report>
    <clover outputFile="clover.xml"/>
    <cobertura outputFile="cobertura.xml"/>
    <crap4j outputFile="crap4j.xml" threshold="50"/>
    <html outputDirectory="html-coverage" lowUpperBound="50" highLowerBound="90"/>
    <php outputFile="coverage.php"/>
    <text outputFile="coverage.txt" showUncoveredFiles="false" showOnlySummary="true"/>
    <xml outputDirectory="xml-coverage"/>
</report>

<clover> Element

Parent element: <report>

Configures a code coverage report in Clover XML format.

outputFile Attribute

Possible values: string

The file to which the Clover XML report is written.

<cobertura> Element

Parent element: <report>

Configures a code coverage report in Cobertura XML format.

outputFile Attribute

Possible values: string

The file to which the Cobertura XML report is written.

<crap4j> Element

Parent element: <report>

Configures a code coverage report in Crap4J XML format.

outputFile Attribute

Possible values: string

The file to which the Crap4J XML report is written.

threshold Attribute

Possible values: integer (default: 50

<html> Element

Parent element: <report>

Configures a code coverage report in HTML format.

outputDirectory Attribute

The directory to which the HTML report is written.

lowUpperBound Attribute

Possible values: integer (default: 50

The upper bound of what should be considered “low coverage”.

highLowerBound Attribute

Possible values: integer (default: 90

The lower bound of what should be considered “high coverage”.

colorSuccessHigh Attribute

Possible values: string (default: #99cb84

The color used to indicate that a line of code is covered by small (and larger) tests, for instance.

colorSuccessMedium Attribute

Possible values: string (default: #c3e3b5

The color used to indicate that a line of code is covered by medium (and large) tests, for instance.

colorSuccessLow Attribute

Possible values: string (default: #dff0d8

The color used to indicate that a line of code is covered by large tests, for instance.

colorWarning Attribute

Possible values: string (default: #fcf8e3

The color used to indicate that a line of code cannot be covered, for instance.

colorDanger Attribute

Possible values: string (default: #f2dede

The color used to indicate that a line of code can be covered but is not covered, for instance.

customCssFile Attribute

Possible values: string

The path to a custom CSS file.

<php> Element

Parent element: <report>

Configures a code coverage report in PHP format.

outputFile Attribute

Possible values: string

The file to which the PHP report is written.

<text> Element

Parent element: <report>

Configures a code coverage report in text format.

outputFile Attribute

Possible values: string

The file to which the text report is written.

showUncoveredFiles Attribute

Possible values: true 或者 false (default: false

showOnlySummary Attribute

Possible values: true 或者 false (default: false

<xml> Element

Parent element: <report>

Configures a code coverage report in PHPUnit XML format.

outputDirectory Attribute

Possible values: string

The directory to which the PHPUnit XML report is written.

<logging> Element

Parent element: <phpunit>

<logging> element and its children can be used to configure the logging of the test execution.

<logging>
    <junit outputFile="junit.xml"/>
    <teamcity outputFile="teamcity.txt"/>
    <testdoxHtml outputFile="testdox.html"/>
    <testdoxText outputFile="testdox.txt"/>
</logging>

<junit> Element

Parent element: <logging>

Configures a test result logfile in JUnit XML format.

outputFile Attribute

Possible values: string

The file to which the test result logfile in JUnit XML format is written.

<teamcity> Element

Parent element: <logging>

Configures a test result logfile in TeamCity format.

outputFile Attribute

Possible values: string

The file to which the test result logfile in TeamCity format is written.

<testdoxHtml> Element

Parent element: <logging>

Configures a test result logfile in TestDox HTML format.

outputFile Attribute

Possible values: string

The file to which the test result logfile in TestDox HTML format is written.

<testdoxText> Element

Parent element: <logging>

Configures a test result logfile in TestDox text format.

outputFile Attribute

Possible values: string

The file to which the test result logfile in TestDox text format is written.

<groups> Element

Parent element: <phpunit>

<groups> element and its <include> , <exclude> , 和 <group> children can be used to select groups of tests marked with the @group annotation (documented in @group ) that should (not) be run:

<groups>
  <include>
    <group>name</group>
  </include>
  <exclude>
    <group>name</group>
  </exclude>
</groups>

The example shown above is equivalent to invoking the PHPUnit test runner with --group name --exclude-group name

<extensions> Element

Parent element: <phpunit>

<extensions> element and its <bootstrap> children can be used to register test runner extensions.

<bootstrap> Element

Parent element: <extensions>

<extensions>
    <bootstrap class="Vendor\ExampleExtensionForPhpunit\Extension"/>
</extensions>

<parameter> Element

Parent element: <bootstrap>

<parameter> element can be used to configure parameters that are passed to the extension for bootstrapping.

<extensions>
    <bootstrap class="Vendor\ExampleExtensionForPhpunit\Extension">
        <parameter name="message" value="the-message"/>
    </bootstrap>
</extensions>

<php> Element

Parent element: <phpunit>

<php> element and its children can be used to configure PHP settings, constants, and global variables. It can also be used to prepend the include_path

<includePath> Element

Parent element: <php>

This element can be used to prepend a path to the include_path

<ini> Element

Parent element: <php>

This element can be used to set a PHP configuration setting.

<php>
  <ini name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

ini_set('foo', 'bar');

<const> Element

Parent element: <php>

This element can be used to set a global constant.

<php>
  <const name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

define('foo', 'bar');

<var> Element

Parent element: <php>

This element can be used to set a global variable.

<php>
  <var name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$GLOBALS['foo'] = 'bar';

<env> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_ENV

<php>
  <env name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_ENV['foo'] = 'bar';

By default, environment variables are not overwritten if they exist already. To force overwriting existing variables, use the force attribute:

<php>
  <env name="foo" value="bar" force="true"/>
</php>

<get> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_GET

<php>
  <get name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_GET['foo'] = 'bar';

<post> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_POST

<php>
  <post name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_POST['foo'] = 'bar';

<server> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_SERVER

<php>
  <server name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_SERVER['foo'] = 'bar';

<files> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_FILES

<php>
  <files name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_FILES['foo'] = 'bar';

<request> Element

Parent element: <php>

This element can be used to set a value in the super-global array $_REQUEST

<php>
  <request name="foo" value="bar"/>
</php>

The XML configuration above corresponds to the following PHP code:

$_REQUEST['foo'] = 'bar';