Попытка запустить PHPUnit с XML-файлом конфигурации приводит к исключению

Я пытаюсь (в течение достаточно долгого времени, с помощью парней в чате PHP) успешно интегрировать PHPUnit с PhpStorm.

Я настроил файл phpunit.xml следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "bootstrap.php" >

    <testsuites>
        <testsuite name="Lamed Test Suite">
            <directory>Custom/*</directory>
        </testsuite>
    </testsuites>

</phpunit>

И успешно настроил PHP-шторм для чтения из этого файла.

Проблема в том, что при запуске тестов я получаю следующую ошибку в консоли PhpStorm:

D:\Websites\php\php.exe C:\fakepath\ide-phpunit.php --bootstrap D:\Websites\htdocs\lamed\tests\boostrap.php --configuration D:\Websites\htdocs\lamed\tests\phpunit.xml
Testing started at 23:51 ...

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Lamed Test Suite.php" nor "Lamed Test Suite.php" could be opened.' in D:\Websites\php\pear\PHPUnit\Util\Skeleton\Test.php:100
Stack trace:
#0 D:\Websites\php\pear\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('Lamed Test Suit...', '')
#1 C:\Users\Dor\AppData\Local\Temp\ide-phpunit.php(95): PHPUnit_TextUI_Command->run(Array, true)
#2 C:\Users\Dor\AppData\Local\Temp\ide-phpunit.php(434): IDE_PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in D:\Websites\php\pear\PHPUnit\Util\Skeleton\Test.php on line 100

Process finished with exit code 255

Очевидно, это считывается из атрибута name= элемента testsuite. Вопрос в том, почему?

ОБНОВЛЕНИЯ

  • Я использую Windows Seven x64 SP1 и PHPStorm 4.0.3. Версия PHPUnit: 3.6.12.
  • Ввод phpunit -c "D:\Websites\htdocs\lamed\tests\phpunit.xml" в CLI фактически дает те же результаты.
  • Мой каталог Custom находится в той же папке, что и файл phpunit.xml.

Я сбит с толку. Был бы признателен за любую помощь.


person Madara's Ghost    schedule 07.08.2012    source источник
comment
Я посмотрю на это снова позже, после перезагрузки моего мозга. Обратите внимание, что я разрабатываю для Linux, и я только что понял, что вы разрабатываете для Windows, хотя на самом деле это не должно иметь значения.   -  person Lusitanian    schedule 08.08.2012
comment
@Lusitanian Подумайте еще раз. Я не могу запустить НИКАКИЕ тесты phpunit через файл конфигурации в Windows 7. Я тоже еще не понял этого.   -  person Levi Morrison    schedule 08.08.2012
comment
@LeviMorrison Интересно. У меня нет коробки с Windows... иначе я бы проверил.   -  person Lusitanian    schedule 08.08.2012
comment
Вам не нужно настраивать это. PHPStorm справится с этим за вас, если вам нужно настроить собственные XML-файлы или файлы начальной загрузки, есть вариант: chat. stackoverflow.com/transcript/11?m=4825091#4825091   -  person hakre    schedule 08.08.2012
comment
@hakre: Похоже на то! Запуск phpunit -c "D:\Websites\htdocs\lamed\tests\phpunit.xml" дал мне то же сообщение.   -  person Madara's Ghost    schedule 08.08.2012
comment
@hakre: я дал точное сообщение об ошибке, свою ОС и структуру каталогов. Что еще вы хотите, чтобы я добавил?   -  person Madara's Ghost    schedule 08.08.2012
comment
Попробуйте запустить один тестовый пример из командной строки. Кажется, PHPUnit не находит ваши тесты. Они называются как FooTest.php?   -  person David Harkness    schedule 08.08.2012
comment
@DavidHarkness: Это действительно решило проблему. :о   -  person Madara's Ghost    schedule 08.08.2012


Ответы (3)


Удалите /* из элемента <directory>. Текстовое содержимое этого элемента должно указывать на каталог, а не на общий файл.

<directory>Custom</directory>

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

По умолчанию все файлы, оканчивающиеся на Test.php (например, UserTest.php), будут проверяться на наличие тестовых случаев. Если у вас другое соглашение об именах, вы можете изменить или добавить атрибут suffix. Например, если вы называете свои тесты как User.test.php, используйте это:

<directory suffix=".test.php">Custom</directory>
person David Harkness    schedule 08.08.2012
comment
Это не удалось. Выбрасывается такое же исключение. Я видел документацию, даже их пример XML, когда копирование/вставка дает мне ту же ошибку (только там написано Object_Freezer или Object/Freezer). - person Madara's Ghost; 08.08.2012
comment
@Truth Обратите внимание, что путь указан относительно расположения файлов xml. Bzt, как заявил Дэвид, проблемы возникают из-за того, что phpunit не находит никаких тестов :) - person edorian; 08.08.2012
comment
Файл phpunit.xml связан с каталогом Custom, мой тест находится внутри Custom. - person Madara's Ghost; 08.08.2012
comment
Имя файла не заканчивалось на Test, как только я это сделал, проблема решилась. Спасибо :) - person Madara's Ghost; 08.08.2012
comment
Поскольку вы помогли мне решить проблему, над которой я работал начальником более 48 часов, я награжу вас наградой, когда смогу (примерно через 2 дня). Держись крепче :) - person Madara's Ghost; 08.08.2012
comment
Ссылка не работает, следующая ссылка соответствует странице, на которую вы ссылались в 2012 году? phpunit.de/manual/current/en/ - person A.L; 30.10.2014
comment
Да, это тот самый. Спасибо! То, что он указывает на текущую, а не на конкретную версию, должно уберечь его от поломки в будущем. - person David Harkness; 30.10.2014

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

В этом случае PHPUnit также попытается просто открыть что-то подходящее, что не сработает. Затем вы видите ошибку.

  • Если у вас есть только один пустой набор тестов, вы увидите исключение с именем набора тестов и php, добавленным для его попытки.

    Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Empty-Testuite.php" nor "Empty-Testuite.php" could be opened.'
    
  • Если у вас есть более одного пустого набора тестов и нет рабочего набора тестов, вы увидите ошибку только о php, без добавления имени.

    Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither ".php" nor ".php" could be opened.'
    
  • Если у вас есть хотя бы рабочий набор тестов, но один или несколько пустых наборов тестов, вы увидите краткий отчет для каждого пустого набора тестов, но без ошибки:

    Empty test suite.
    

Когда я пишу, что это запасной вариант, это не должно означать, что такое поведение предусмотрено PHPUnit. Видеть ошибку в вашем случае нормально, потому что, прежде чем вы начнете с тестов, вам нужно хотя бы один из них запуститься. И прежде чем вы начнете настраивать наборы тестов, то же самое.

Устраните основную проблему, связанную с отсутствием теста, и ошибка исчезнет.

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


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

  • PHPUnit 3.6.7 Себастьяна Бергманна.
  • PHP 5.4.5 от php.net
person hakre    schedule 08.08.2012
comment
Но у меня есть тестовый пример внутри пользовательской папки, и он работает, когда я запускаю его непосредственно из CLI. Следует ли называть его как-то конкретно? - person Madara's Ghost; 08.08.2012
comment
Да, из вашего скриншота в чате нужно переименовать файл с lamed.php на lamedTest.php иначе PHPUnit не распознает это и testsuite все еще пуст (первый случай в списке в моем ответе). - person hakre; 08.08.2012

Если бы та же проблема изменила значение для каталога на абсолютный путь вместо относительного пути, и это сработало. Например, я изменил тесты на C:\eclipse\Workspace\testweb.

Жаль, что мне пришлось просмотреть много неинформативной информации, и это не упоминается в документации, а также не задокументировано, как запустить интерфейс командной строки с файлом конфигурации xml.

phpunit -c тесты/all.xml

Тестовые файлы php должны заканчиваться на test, как и myTest.php, даже если вы добавляете элементы файла C:\eclipse\Workspace\testweb\tests\classes\something.php, но C:\eclipse\Workspace\ testweb\tests\classes\somethingtest.php будет работать

person HMR    schedule 02.09.2012