PHPUnit сообщает об исключении PHPUnit_Framework_Exception - PullRequest
4 голосов
/ 26 сентября 2011

Я добавил простой тест в пакет.

Как и предполагалось в руководстве, я пытался заставить PHPUnit загрузить конфигурацию с помощью:

phpunit -c /app

phpunit.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
    backupGlobals               = "false"
    backupStaticAttributes      = "false"
    colors                      = "true"
    convertErrorsToExceptions   = "true"
    convertNoticesToExceptions  = "true"
    convertWarningsToExceptions = "true"
    processIsolation            = "false"
    stopOnFailure               = "false"
    syntaxCheck                 = "false"
    bootstrap                   = "bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
</phpunit> 

Я получаю сообщение об ошибке:

root@h0x03:/var/www/fi/FrontendIntegrator# phpunit -c app/
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Project Test Suite.php" nor "Project Test Suite.php" could be opened.' in /usr/share/php/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/share/php/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('Project Test Su...', '')
#1 /usr/share/php/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/bin/phpunit(49): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/share/php/PHPUnit/Util/Skeleton/Test.php on line 102

PHPUnit явно загружает файл и пытается найти PHP-файл, названный в честь имени набора тестов. Я не могу найти информацию о том, почему это так или как должен выглядеть такой файл.

Ответы [ 4 ]

4 голосов
/ 26 сентября 2011

Похоже, что PHPUnit пытается найти файл, названный по имени атрибута тега testsuite

  1. , если либо не может найти какие-либо тесты (неправильноимя или неправильный каталог) или

  2. , если в тестовом скрипте произошла фатальная ошибка ;что происходит так рано, что PHPUnit не может идентифицировать содержимое этого файла как тест - поскольку ни один класс не может быть загружен до этой точки.

3 голосов
/ 17 марта 2012

У меня сегодня была такая же проблема при тестировании моих контроллеров.Оказывается, что просто следование команде Book не работает, поскольку PHPUnit не может найти тестовые классы.Мне удалось найти обходной путь, просто укажите тестовый файл, который вы хотите протестировать, и он будет работать.

phpunit -c app src/Acme/DemoBundle/Tests/Utility/CalculatorTest.php
1 голос
/ 14 мая 2014

Мне случилось, что у меня был один дополнительный уровень каталогов в моих пакетах.Вместо MyVendorName\MyBundleNameBundle у меня было MyVendorName\MyProject\MyBundleNameBundle

Каталоги по умолчанию в phpunit.xml.dist, в разделе testsuites:

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

, но ни один из них не соответствовал моему пространству имен пакета:Xmontero\Emperors\AdminBundle чьи тесты, в свою очередь, находились в каталоге src/Xmontero/Emperors/AdminBundle/Tests.

Кроме того, ВСЕ мои пакеты имели этот синтаксис, и я удалил все пакеты с другим синтаксисом (например, Acme\DemoBundle).В результате phpunit не нашел никакого теста.

Я решил так: чуть ниже этой строки в phpunit.xml.dist

<directory>../src/*/*Bundle/Tests</directory>

Я добавил эту строку

<directory>../src/*/*/*Bundle/Tests</directory>

так что читается:

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

... и все работало нормально;)

- РЕДАКТИРОВАТЬ 1 день спустя -

Это дает мне сейчасотчет о покрытии о самом тесте, при запуске phpunit -c app --coverage-html myNiceDir - когда я ожидаю, что он даст мне только покрытие тестируемой системы.

Это потому, что существует whitelist, который следует той же схемеи есть что-то, что нужно добавить в список exclude:

Где это прочесть:

<exclude>
    <directory>../src/*/*Bundle/Resources</directory>
    <directory>../src/*/*Bundle/Tests</directory>
    <directory>../src/*/Bundle/*Bundle/Resources</directory>
    <directory>../src/*/Bundle/*Bundle/Tests</directory>
</exclude>

Я изменился на это:

<exclude>
    <directory>../src/*/*Bundle/Resources</directory>
    <directory>../src/*/*/*Bundle/Resources</directory>
    <directory>../src/*/*Bundle/Tests</directory>
    <directory>../src/*/*/*Bundle/Tests</directory>
    <directory>../src/*/Bundle/*Bundle/Resources</directory>
    <directory>../src/*/Bundle/*Bundle/Tests</directory>
</exclude>

Iнадеюсь теперь это правильно;)

0 голосов
/ 24 апреля 2014

У меня была та же самая точная ошибка, и я решил ее, просто обновив версию phpunit, у меня было 3.6.10, а теперь у меня 4.0.17, и она работает отлично и как и ожидалось. Книга Synfony не является полностью неправильной, она просто указывает неверную версию phpunit как необходимую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...