2016-06-06 3 views
4

Hey Все установленные PHPUnit в моем Symfony3 проекте, и когда я вбежал в моем терминале бен/PHPUnit -c приложение я получаю эту ошибку:Symfony3 PHPUnit XML

Could not load XML from empty string 

гугле его, и оказалось, что мне нужно, чтобы приложение 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     = "autoload.php" > 

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

    <!-- 
    <php> 
     <server name="KERNEL_DIR" value="/path/to/your/app/" /> 
    </php> 
    --> 

    <filter> 
     <whitelist> 
      <directory>../src</directory> 
      <exclude> 
       <directory>../src/*/*Bundle/Resources</directory> 
       <directory>../src/*/*Bundle/Tests</directory> 
       <!--directory>../src/*/Bundle/*Bundle/Resources</directory> 
       <directory>../src/*/Bundle/*Bundle/Tests</directory--> 
      </exclude> 
     </whitelist> 
    </filter> 

</phpunit> 

так что теперь он работает нормально, но вопросы, которые я не могу найти открытые ответы являются:

  1. Зачем нужен файл php для этого файла, я вижу, что файл показывает phpunit, где искать тесты, но это все?

  2. Я создал этот файл вручную, чтобы создать его автоматически с помощью команды терминала.

  3. Насколько я знаю <whitelist> - где phpunit разрешено «смотреть»? и <exlude> его где phpunit не разрешено «смотреть»? и если да, то почему бы это <directory>../src/*/*Bundle/Tests</directory> быть в <exlude>, если это где тест.

ответ

1

на вопросы первых:

  1. Это конфигурационный файл. Он позволяет настраивать поведение PHPUnits. Для полного объяснения файла смотрите the docs.
  2. Установка по умолчанию для Symfony содержит файл phpunit.xml.dist в корневом каталоге (See the repository). .dist в этом случае означает, что это стандарт, предложенный Symfony, и вы можете изменить его на свои нужды. Вы, вероятно, сделали то же самое с вашим файлом parameters.yml.dist. Просто скопируйте его и назовите его phpunit.xml и настройте любой параметр в текущую среду. Убедитесь, что вы не проверяете файл phpunit.xml в своем VCS, поэтому изменения, связанные с окружающей средой, не мешают другим системам, в которых вы запускаете свой код.
  3. Элементы <whitelist> и <exclude> определяют файлы, которые должны быть considered by PHPUnit or ignored. Поскольку вы добавили этот блок внутри элемента <filter>, он определяет все файлы, для которых PHPUnit должен генерировать покрытие кода. Вы исключаете свои тестовые файлы из этого, потому что вы ожидаете их запуска, и вас интересует только то, как ваш фактический код ведет себя в условиях тестирования.

Что касается того, почему ваши тесты не будут выполняться, я не уверен. Попробуйте, как я описал в пункте 2, и запустите phpunit в вашем каталоге проектов. Для меня он отлично работал из коробки.

+0

Благодарим вас за очень полезную информацию. Теперь он работает, но мне нужно переместить и переименовать phpunit.xml.dist из ./ корневой директории в каталог приложения, любую идею, почему ?. Также должен ли phpunit.xml указывать на VCS только phpunit.xml.dist, а когда проект клонирован, обновление для компоновщика установит phpunit.xml на основе n phpunit.xml.dist? – John

+0

Приятно слышать. Да, точно только зафиксировать '.dist'. Для автоматического переименования вам, вероятно, придется использовать скрипт. Посмотрите на [Incenteev/ParameterHandler] (https://github.com/Incenteev/ParameterHandler). Это пакет, который используется для файла Symfony2 'parameters.yml.dist'. – ferdynator

5

С новой структурой каталогов symfony3 файлы конфигурации PHPUnit расположены в корне проекта, поэтому вам больше не нужно указывать параметры (конфигурация) -c. Таким образом, вы можете запустить просто следующим образом:

>bin/phpunit 

Надеется, что это поможет

0

как сказал @Matteo, структура каталогов Symfony3 изменилась.

Я нашел в моем случае, мне нужно изменить только в корневую директорию Symfony3 и запустите:

phpunit -c phpunit.xml.dist 

Файл конфигурации по умолчанию «phpunit.xml.dist» автоматически создается в вашей структуре каталогов Symfony3 , вы можете изменить это в соответствии с вашими потребностями. Я просто подтвердил, что это работает в моей системе.

Смежные вопросы