phpunit не находит никаких тестов с тегом Director xml, но делает с (некоторыми) файлами теги

У меня есть эта конфигурация:

<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals = "false" backupStaticAttributes = "false" colors = "false" convertErrorsToExceptions = "true" convertNoticesToExceptions = "true" convertWarningsToExceptions = "true" processIsolation = "false" stopOnFailure = "false" stopOnError = "false" stopOnIncomplete = "false" syntaxCheck = "false" bootstrap = "test_bootstrap.php" > <testsuites> <testsuite name="UnitTests"> <file>unit/api/2/ApiControllerTest.php</file> <file>unit/api/2/RoutesTest.php</file> </testsuite> 

он запускает тестовые файлы. Если я заменю файлы на

 <directory>unit</directory> // or <directory>unit/api/2</directory> // or <directory>unit/api/2/*</directory> // or <directory>unit/api/2/*Test.php</directory> // or <directory suffix="Test.php">unit/api/2</directory> 

Он просто говорит: никаких тестов не выполнено!

Пожалуйста, что может быть неправильно?

Ubuntu 12.04 LTS, php 5.3.10, phpunit 3.7.16

Где в вашем пути к каталогу unit находится файл phpunit.xml?

если ваш путь выглядит примерно так:

 projectroot |- phpunit.xml |- unit/ |- api/ 

Вы можете попробовать установить каталог в phpunit.xml :

 <directory>./unit</directory> 

А затем запустите phpunit из root следующим образом: phpunit -c phpunit.xml

Если это не сработает, что-то еще не так. Что произойдет, если вы запустите это:

 phpunit ./unit/api/2 

Если тесты не выполняются, ответьте на следующие вопросы:

  • возможно, ваши методы в тестовых окнах не начинаются с «теста»?
  • Все файлы тестовых файлов заканчиваются на Test.php?
  • Все классы testcase расширяют PHPUnit_Framework_TestCase?
  • Все имена классов testcase заканчиваются на 'Test'?

Это может немного зависеть от версии Phpunit.

Я мог бы заставить его работать с двумя более старыми (3.7.22 и 3.7.38), но раньше имел аналогичную проблему. Вот мое решение:

Сначала я неправильно настроил каталог:

  <testsuites> <testsuite name="Default"> <directory>/tests</directory> </testsuite> </testsuites> во  <testsuites> <testsuite name="Default"> <directory>/tests</directory> </testsuite> </testsuites> 

Как вы можете видеть в этом неправильном примере, он имеет префикс слэш (« / »). Удаление этой косой черты приводит к следующему отрывку XML, который отлично работает:

  <testsuites> <testsuite name="Default"> <directory>tests</directory> </testsuite> </testsuites> во  <testsuites> <testsuite name="Default"> <directory>tests</directory> </testsuite> </testsuites> 

Убедитесь, что каталог не имеет префикса с косой чертой и что он существует. Существование часть имеет решающее значение, потому что Phrunit testrunner не будет отображать сообщение об ошибке, если оно не существует. Вы увидите, что тесты не выполняются.

Никаких тестов не выполнено!


Принимая то, что у вас есть в вашем вопросе, например:

  1. <directory>unit</directory> : он терпит неудачу, потому что каталог не существует (вы думаете, что это так, я знаю, но он не работает, если каталог не существует, Phpunit не лжет вам).
  2. <directory>unit/api/2</directory> : Если это не удается, оно терпит неудачу, потому что каталог не существует (как вы думаете, он знает, но он не работает, если каталог не существует, Phpunit не лжет вам ).
  3. <directory>unit/api/2/*</directory> : Это всегда будет работать, потому что каталог не существует. Большинство файловых систем не позволяют использовать символ « * » в именах каталогов и файлов.
  4. <directory>unit/api/2/*Test.php</directory> : То же самое здесь, это не допустимое имя каталога, оно терпит неудачу, потому что каталог не существует.
  5. <directory suffix="Test.php">unit/api/2</directory> : Если это не удается, оно терпит неудачу, потому что каталог не существует (как вы думаете, он знает, но он не работает, если каталог не существует , Phpunit не лжет вам). Кроме того, параметр суффикса со значением « Test.php » лишний, поскольку это суффикс по умолчанию. Поскольку это лишнее, это круто, и вы должны удалить его из файла XML.

Никакое программное обеспечение не содержит ошибок, и это, естественно, относится и к Phpunit, но прежде всего вам следует подумать, что Phpunit не лжет вам в первую очередь.

У меня для себя не было проблем с двумя версиями, зарегистрированными после того, как я исправил конфигурацию каталога. Ваш пробег может отличаться. Это относится к точкам 1, 2 и 5 конкретно: по вашему вопросу, похоже, что эти каталоги существуют, но из описания, которое вы даете, и каково поведение Phpunit, которое я вижу, эти каталоги не существуют.

Точки 3 и 4 должны быть четкими, они просто не работают, потому что вы добавляете подстановочные знаки в имя каталога, которое предназначено для описания конкретного пути, чтобы не намекать, что использование подстановочных знаков предназначено / разрешено. Вы также можете найти этот пункт в предыдущем вопросе Q & A: попытка запустить Phpunit с конфигурационным XML-файлом приводит к исключению .


Информация в этом ответе основана на

  • PHPUnit 3.7.22 и 3.7.38 – Себастьян Бергманн.
  • PHP 5.4.36 по php.net

Атрибут суффикса PHPUnit по умолчанию имеет значение «Test.php», что может быть не сразу очевидным. Если ваши тесты не используют этот суффикс (например, он использует TestUser.php или /test/User.php вместо UserTest.php), тест будет пропущен.

Если вы уверены, что целевой каталог существует, убедитесь, что ваши файлы соответствуют выбранному суффиксу, используемому PHPUnit.