Intereting Posts
Как получить ключевые значения с помощью foreach? Получить данные из файла JSON с помощью PHP Получение полного PATH загруженного файла – PHP css исчезает при попытке создать чистый URL-адрес Почему PHP, похоже, неправильно оценивает это состояние? Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, boolean указан в /home/folder/public_html/folder/folder/login.php в строке 18 PHP: Как использовать set_error_handler () для правильной обработки всех ошибок, кроме уведомлений? Magento – данные не вставляются в базу данных, но идентификатор автоинкремента PHP Infinite Loop «Пока» с классом Установить смещение по времени в php PHP – Амперсанд перед переменной в цикле foreach php: Ошибка использования нового DateTime в PHP 5.3 Файл загрузки Ajax: $ _FILES пуст, но файлы существуют в заголовке запроса Как защитить веб-приложение, проданное на основе лицензии, от пиратства? Backbone + RequireJS: файлы HTML, загруженные RequireJS, интерпретируются как файлы JS

Что делает режим PHPUnit Strict?

Мне интересно, что такое «строгий режим в PHPUnit»?

например:

phpunit --strict 

или в phpunit.xml

 <phpunit strict="true"> 

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

 PHP_Invoker_TimeoutException: Execution aborted after 1 second 

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

Это все, что я мог найти в документации, но я также проверил источники, и я обнаружил, что в строгом режиме:

  1. Тесты без утверждений могут быть отмечены как неполные / неудачные.
  2. Каждый тест может выполняться с указанием времени выполнения в зависимости от его размера и наличия расширения pcntl и библиотеки PHP_Invoker . Существует три значения тайм-аута:

    • timeoutForSmallTests (значение по умолчанию: 1)
    • timeoutForMediumTests (значение по умолчанию: 10)
    • timeoutForLargeTests (значение по умолчанию: 60)

    Размер теста (малый, средний или большой) определяется методом PHPUnit_Util_Test::getSize() :

    • Тестовые примеры, спускающиеся с PHPUnit_Extensions_Database_TestCase или PHPUnit_Extensions_SeleniumTestCase , большие.
    • Тесты и индивидуальные тесты также могут быть сделаны большими или средними, добавив их в группы «большой» или «медиум» соответственно.
    • В противном случае тест небольшой.

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

Короткий ответ: для длительных тестов используйте аннотацию для увеличения допустимого времени выполнения:

 @large // 10 seconds @medium // 5 seconds @small // 1 second max <-- Default, so no point using 

Длительный ответ:

Вот обновленный набор информации, который был получен с помощью @Crozin.

В моем случае ошибка заключалась в том, что тест проходил слишком долго (> 1 секунда.) (Doctrine ORM schema drop + create может замедлить работу, см. Этот ZendCast для того, что я делал ). Это вызвало проблему (и некоторую отдачу) от PHP_Invoker. Строгий режим не позволяет выводить.

Рединг / Обратное проектирование /usr/share/php/pear/share/pear/PHPUnit/Util/Test.php::getSize () (и getGroups () в том же классе). Я понял, что есть 3 недокументированных аннотации мы можем использовать:

 @large // 10 seconds @medium // 5 seconds @small // 1 second max run time 

Они могут быть указаны на уровне класса или на уровне метода. Проблема № 490 в PHPUnit github подсказывает проблемы с поставкой уровня уровня класса и метода, поэтому YMMV, если вы их смешиваете. Как сказал крозин, выделенные тайм-ауты составляют 10,5,1 секунды соответственно.

Альтернативное решение заключалось в том, чтобы увеличить продолжительность выполнения вызываемой функции (на моем медленном компьютере).

 sudo vi /usr/share/php/pear/share/pear/PHP/Invoker.php Increase line 1 "declare(ticks = 1);" to "declare(ticks = 10);" // or any higher int that meets your needs 

Вот куча информации о строгом режиме, который помог мне найти решение:

PHP_Invoker
Класс утилиты для вызова вызываемых вызовов с таймаутом. Этот пакет необходим для обеспечения соблюдения тайм-аутов тестирования в строгом режиме. [ Инструкции по установке PHPUnit ]

Тесты строгого режима, которые ничего не утверждают, отмечены как неполные. Тестирование, которые являются неполными (или пропущенными), не дают никакого покрытия кода. Slideshare by Sebastian Bergmann (слайд 10)

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