I\'ve got a problem when using command line to run tests: if I run phpunit like this:
phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php
By using a data provider with named datasets it's simpler now:
public function provideData()
{
yield "dataset name 1" => [
$expected = 0,
$val1 = 1,
$val2 = 2
];
yield "dataset name 2" => [...];
}
$ phpunit --filter "dataset name 2"
Like @sjoerd pointed out the name that gets matched against contains the number of the dataset.
That means that this works:
phpunit --filter "testAdd with data set #0" DataTest DataProviderTest.php
against your file produces:
PHPUnit 3.7.0RC1 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 5.25Mb
OK (1 test, 1 assertion)
tested in PHPUnit 3.5 and upwards.
It's not really pretty and having another syntax for this within PHPUnit is definitely preferable but for now it might solve your problem and once someone sends a PR it will be nicer to use ;)
Tracking issue for the nicer syntax on the phpunit github issue tracker
The regex to handle tests with or without data sets is
phpunit --filter "/::<method>( with data set .*)?$/" <class> <file>
For example
phpunit --filter "/::testAdd( with data set .*)?$/" DataTest DataProviderTest.php
Since a test method won't have a space in the name unless it has a data set, you could really shrink this to
phpunit --filter "/::testAdd( .*)?$/" DataTest DataProviderTest.php
In this case, the regex is matched against the following string:
DataTest::testAdd with data set #0
DataTest::testAdd with data set #1
...
So naturally your regex testAdd$
won't work.
The regex in the answer no longer seems to work (at least not in 4.0.12).
It looks like --filter doesn't like the space, and gives the following error:
Fatal error: "preg_match(): Compilation failed: missing ) at offset
This is fixed by replacing the space with \s The quotes also need to get removed (or else the \ needs to be \)
phpunit --filter /::testAdd(\s.*)?$/ DataTest DataProviderTest.php