У меня возникла проблема при использовании командной строки для запуска тестов: если я запустил 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