How to exclude file from PHPUnit test suite in xml config?
Whit this PHPUnit configuration-file I have made very good experiences.
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
colors="true"
processIsolation="true"
stopOnFailure="true"
syntaxCheck="false"
backupGlobals="false"
bootstrap="test-bootstrap.php">
<testsuites>
<testsuite name="php-dba-cache">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html"
target="build/coverage"
charset="UTF-8"
yui="true"
highlight="true"
lowUpperBound="35"
highLowerBound="70"/>
</logging>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
<exclude>
<file>test-bootstrap.php</file>
</exclude>
</whitelist>
</filter>
</phpunit>
https://github.com/gjerokrsteski/php-dba-cache
To exclude the file name TestCase.php
.
add this to your phpunit.xml
<testsuites>
<testsuite name="BLABLA">
<directory suffix=".php">./tests</directory>
<exclude>./tests/TestCase.php</exclude>
</testsuite>
</testsuites>
Here is an additional excerpt from a real-live test-suite I can confirm it working with:
...
<testsuites>
<testsuite name="n98-magerun-tests">
<directory>./tests</directory>
<exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude>
</testsuite>
...
There are a number of ways to not run a particular test - putting it into a blacklist so it's never run may not be the way - as changing it means editing the blacklist, and you'll often endup bouncing it in and out of version control.
There are several other ways that may be more appropriate:
If a test is not yet ready to run:
$this->markTestIncomplete('This test has not been implemented yet.');
If there's an outside reason it should not be run, skip it:
if (!extension_loaded('mysqli')) {
$this->markTestSkipped('The MySQLi extension is not available.');
}
You can also put that into the setUp()
function, so it will skip all the tests in a test-class.
You can make a test dependant on a previous one succeeding:
public function testEmpty()
{
$stack = array();
$this->assertTrue(empty($stack));
return $stack; // also sends this variable to any following tests - if this worked
}
/**
* only runs if testEmpty() passed
*
* @depends testEmpty
*/
public function testPush(array $stack)
{
}
The @group -name- annotation is one of the best ways to specifically stop, or run one group of tests
/**
* @group database
* @group remoteTasks
*/
public function testSomething()
{
}
testSomething()
is now in two groups, and if either is added on the command line (or in the config.xml) --exclude-group
parameter. it won't be run. Likewise, you could run only tests that belong to a particular group - say named after a feature, or bug report.