Reputation: 470
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
it works fine. But we use a regular expression to specify exactly the name of the method that we want to be tested:
phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php
The second approach is not working unfortunately. Source code is:
<?php
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
?>
Upvotes: 16
Views: 5211
Reputation: 3740
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"
Upvotes: 4
Reputation: 36
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
Upvotes: 2
Reputation: 38961
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
Upvotes: 7
Reputation: 36532
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
Upvotes: 16
Reputation: 75598
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.
Upvotes: 1