Configuring PHPUnit¶
Configuration File¶
PHPUnit is configured in a phpunit.xml
configuration file. If bin/phpunit
is run with no arguments, it will look for a phpunit.xml file in the root of the project.
You can also specify which is selected at runtime by using bin/phpunit -c path/to/phpunit.xml
Selecting which phpunit.xml PHPQA should use¶
PHPQA will run the project root phpunit.xml
. Rather than maintain multiple copies of the file, you can symlink either
- PHPQA's default file using
ln -s vendor/edmondscommerce/phpqa/configDefaults/generic/phpunit.xml phpunit.xml
- Your own custom file using
cp vendor/edmondscommerce/phpqa/configDefaults/generic/phpunit.xml qaConfig/phpunit.xml; ln -s qaConfig/phpunit.xml phpunit.xml
Common Customisations¶
Root node parameters¶
These attributes can all be added to the root <phpunit />
node:
forceCoversAnnotation="""
- Doesn't deem application code to be covered unless a test provides an@covers
annotation for its class, or method. Default valuefalse
; Recommended value:true
beStrictAboutCoversAnnotation
- Requires that the test method has@covers
or@uses
annotations for all application code methods that are called. Default valuefalse
; Recommended value:false
timeoutForSmallTests="""
- the max seconds a Small test should take. Recommended value:1
timeoutForMediumTests="""
- the max seconds a Medium test should take. Recommended value:5
timeoutForLargeTests="""
- the max seconds a Medium test should take. Recommended value:300
executionOrder=""
- If using Test Dependencies this is required to be set todepends,defects
Default value:default
, Recommended value:depends,defects
Test Suites¶
Test Suites exist to group multiple related tests into something that can be run in isolation.
Once configured, you can tell PHPUnit to run each test suite using bin/phpunit testsuitename
The default provides only tests
, which includes the tests/
folder.
You can also include Test Suites for Small, Medium and Large as follows:
<testsuites>
<testsuite name="tests">
<directory suffix="Test.php">../../../../../tests/</directory>
</testsuite>
<testsuite name="small">
<directory suffix="Test.php">../../../../../tests/Small</directory>
</testsuite>
<testsuite name="medium">
<directory suffix="Test.php">../../../../../tests/Medium</directory>
</testsuite>
<testsuite name="large">
<directory suffix="Test.php">../../../../../tests/Large</directory>
</testsuite>
</testsuites>
You can also add your own for any other sets of tests you'd like to run as a group.
PHPUnit Test Suites documentation
Environment Config¶
You can declare environment variables such as DB credentials and other config directly in the phpunit.xml
For example:
<phpunit>
<php>
<ini name="error_reporting" value="-1" />
<env name="SHELL_VERBOSITY" value="-1" />
<env name="dbUser" value="test" />
<env name="dbPass" value="password" />
<env name="dbName" value="thing_test" />
<env name="dbHost" value="127.0.0.1" />
<env name="entitiesPath" value="vendor/edmondscommerce/thing/src/Entities" />
<server name="dbUser" value="test" />
<server name="dbPass" value="password" />
<server name="dbName" value="thing_test" />
<server name="dbHost" value="127.0.0.1" />
<server name="entitiesPath" value="vendor/edmondscommerce/thing/src/Entities" />
</php>
</phpunit>
Runtime parameters¶
Stopping on Failure, Iterating¶
When working towards getting the tests passing, you can use the uniterate
mode which will not generate coverage and will stop on failure. This makes for a much faster iteration cycle.
bin/qa -t uniterate