Не удается выполнить одиночный тест с поставщиком данных в PHPUnit

У меня возникла проблема при использовании командной строки для запуска тестов: если я запустил phpunit следующим образом:

phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php 

он отлично работает. Но мы используем регулярное выражение, чтобы точно указать имя метода, который мы хотим протестировать:

 phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php 

К сожалению, второй подход не работает. Исходный код:

 <?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) ); } } ?> 

Регулярное выражение для обработки тестов с или без наборов данных

 phpunit --filter "/::<method>( with data set .*)?$/" <class> <file> 

Например

 phpunit --filter "/::testAdd( with data set .*)?$/" DataTest DataProviderTest.php 

Поскольку у метода тестирования не будет пробела в названии, если у него нет набора данных, вы можете действительно уменьшить его до

 phpunit --filter "/::testAdd( .*)?$/" DataTest DataProviderTest.php 

Как и @sjoerd, указывается, что имя, которое сопоставлено, содержит номер набора данных.

Это означает, что это работает:

 phpunit --filter "testAdd with data set #0" DataTest DataProviderTest.php 

против вашего файла производит:

 PHPUnit 3.7.0RC1 by Sebastian Bergmann. . Time: 0 seconds, Memory: 5.25Mb OK (1 test, 1 assertion) 

протестирован в PHPUnit 3.5 и выше.


Это не очень красиво и имеет другой синтаксис для этого в PHPUnit, безусловно, предпочтительнее, но на данный момент это может решить вашу проблему, и как только кто-то отправит PR, будет лучше использовать;)

Проблема отслеживания для более phpunit github issue tracker синтаксиса в phpunit github issue tracker

В этом случае регулярное выражение сопоставляется с следующей строкой:

 DataTest::testAdd with data set #0 DataTest::testAdd with data set #1 ... 

Таким образом, ваше регулярное выражение testAdd$ не будет работать.

Регулярное выражение в ответе больше не работает (по крайней мере, не в 4.0.12).

Похоже, что -filter не нравится пространство и дает следующую ошибку:

Неустранимая ошибка: «preg_match (): Ошибка компиляции: отсутствует) при смещении

Это фиксируется заменой пространства на \ s. Кавычки также должны быть удалены (иначе \ должно быть \)

 phpunit --filter /::testAdd(\s.*)?$/ DataTest DataProviderTest.php