Я бы хотел, чтобы мои модульные тесты выполнялись в строгом режиме, чтобы я мог легко узнать о каких-либо исключительно длинных тестах, но в то же время по умолчанию 1-го времени недостаточно. Могу ли я изменить его для всех тестов? Я знаю, что могу установить тайм-аут для каждого класса (и отдельных тестов) с помощью @short / @medium / @long
аннотаций, но есть ли что-то подобное для всех тестов? Возможно, в phpunit.xml?
Это необходимо для исключения PHP_Invoker_TimeoutException: Execution aborted after 1 second
которое происходит раз в то время.
Этот параметр можно включить, установив время раз в phpunit.xml. Время находится в секундах.
Пример:
<phpunit strict="true" timeoutForSmallTests="1" timeoutForMediumTests="5" timeoutForLargeTests="10" > // test suites </phpunit>
Тесты могут быть отмечены как средние или большие, путем маркировки фактических функций тестирования, например, следующих
/** * @medium */ public function testTestThing() { $this->assertTrue(false); }
EDIT: современные версии PHPUnit больше не выполняют этих тайм-аутов, а также изменяют поведение строгого режима в целом путем введения отдельных флагов для каждой вещи, ранее описанной в строгом режиме :
beStrictAboutTestsThatDoNotTestAnything="true" checkForUnintentionallyCoveredCode="true" beStrictAboutOutputDuringTests="true" beStrictAboutTestSize="true" beStrictAboutChangesToGlobalState="true"
Несвязанное предупреждение: оно также изменяет пути к испытаниям в конфигурации XML относительно файла конфигурации XML, в отличие от старого по умолчанию, что пути должны относиться к текущему рабочему директорию.
Кроме того, вы можете установить их также в методе setUp () следующим образом:
$this->getTestResultObject()->setTimeoutForSmallTests(1); $this->getTestResultObject()->setTimeoutForMediumTests(5); $this->getTestResultObject()->setTimeoutForLargeTests(10);