PHPUnit TestSuite Исключить

поэтому я хотел бы исключить directoy из моего Testsuite так:

<testsuite name="PHPUnitWillKillMe">   
    <directory>src/*/Bundle/*/*Bundle/Tests</directory>
    <exclude>src/*/Bundle/*/*Bundle/Tests/Controller/</exclude>
</testsuite>   

Все, кроме Контроллеров, должны быть протестированы.

Дело в том, что оно не работает. PHPUnit все еще запускает все тесты в src//Bundle//* Bundle/Tests/Controller/при запуске

 phpunit --testsuite PHPUnitWillKillMe

Любая идея?

С наилучшими пожеланиями!

PHPUnit Версия я тестировала это 3.7.21 и 3.7.28.

Ответ 1

Я тестировал его в своем демонстрационном проекте Symfony (Bundles предполагает, что это то, что вы используете), и у меня такая же проблема. Кажется, это комбинация двух проблем. Во-первых, существует известная ошибка с запуском PHPUnit (PHPUnit 3.7.19) с опцией -c или --config:

https://github.com/sebastianbergmann/phpunit/issues/928

При запуске в другом месте и определении файла конфигурации с помощью --config исключение, однако, перестанет работать.

Во-вторых, директива exclude, кажется, игнорирует/терпит неудачу, когда в пути есть какое-либо подтачивание (*), поэтому, удалив globbing, это сработало для меня:

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
        <exclude>../src/Blah/MyBundle/Tests/Controller/</exclude>
    </testsuite>
</testsuites>

Это метод только, который я нашел, чтобы исключить тесты в MyBundle по мере необходимости. Для exclude работа в режиме globbing выполняла не. Но тогда это означает, что вам нужно добавить столько директив exclude, что есть папки, которые вы хотите игнорировать.

Вероятная связанная проблема gihub: https://github.com/sebastianbergmann/phpunit/pull/573

[...] это исправление попадает в релиз 4.0, поскольку оно нарушает обратную совместимость.

  • Решение №1: удалите любое перемещение по вашим путям.
  • Решение №2: переход на PHPUnit v4. * (не проверенный мной, см. комментарии, не решает проблему путей exclude с globbing)

Ответ 2

Просто у вас была аналогичная проблема, phpunit имеет неплохую поддержку для групп:

...
--filter <pattern>       Filter which tests to run.
--group ...              Only runs tests from the specified group(s).
--exclude-group ...      Exclude tests from the specified group(s).
--list-groups            List available test groups.
...

Что вы делаете, это

/**
 * @group nonRunnableGroupName
 */
public function testSomething()
{ /* test here */ }

И запустите тест, например

$ phpunit -c /src --exclude-group nonRunnableGroupName