Мне интересно, что такое «строгий режим в PHPUnit»?
например:
phpunit --strict
или в phpunit.xml
<phpunit strict="true">
Я включил его, чтобы попробовать, и мои тесты начали сбой с
PHP_Invoker_TimeoutException: Execution aborted after 1 second
Обратите внимание, что PHPUnit проглатывает весь вывод, который испускается во время выполнения теста. В строгом режиме тест, который испускает выход, не удастся.
Это все, что я мог найти в документации, но я также проверил источники, и я обнаружил, что в строгом режиме:
Каждый тест может выполняться с указанием времени выполнения в зависимости от его размера и наличия расширения 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