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.