PHPUnit - Почему PHPUnit работает в строгом режиме?

Вопрос: почему PHPUnit работает в строгом режиме?

Проблема:

  

PHPUnit 4.3.1 от Себастьяна Бергмана.

     

Конфигурация прочитана из /full/path/to/configuration.xml

     

R

     

Время: 2,65 секунды, память: 11,50 МБ

     

Хорошо, но неполные, пропущенные или рискованные тесты! Тесты: 1, Утверждения: 1,   Рискованно: 1. Готово.

также:

  

Рискованный тест: тестовый код или тестированный код не закрывал (только) свой собственный   выходные буферы

Моя версия PHP - 5.4.

Как указано в документации ( https://phpunit.de/manual/current/en/strict -mode.html ) кажется, что это применимо только к настройке строгого режима PHPUnits.

  

PHPUnit может выполнять дополнительные проверки во время выполнения тестов. В   дополнение к мелкозернистому контролю над различным строгим режимом   проверяет (см. ниже), вы можете использовать параметр командной строки --strict или установить   strict = "true" в XML-файле конфигурации PHPUnit, чтобы включить все   их.

-

  

Вывод во время выполнения теста

     

PHPUnit может быть строгим в отношении вывода во время тестов. Эта проверка может быть   включается с помощью параметра --disallow-test-output в командной строке   или установив beStrictAboutOutputDuringTests = "true" в XML PHPUnit   файл конфигурации.

     

Тест, который выдает выходные данные, например, вызывая print в   тестовый код или проверенный код, будут помечены как рискованные, когда эта проверка   включен.

Я верю, что я не активировал строгий режим. Моя командная строка "/usr /bin /php /usr /bin /phpunit --colors --bootstrap /full/path/to/bootstrap.php --configuration /full/path/to/configuration.xml /full /path /to/Test.php». Я также использовал конфигурацию, предоставленную по адресу .configuration.html ».

<phpunit
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.3/phpunit.xsd"
   backupGlobals="true"
   backupStaticAttributes="false"
   cacheTokens="false"
   colors="false"
   convertErrorsToExceptions="true"
   convertNoticesToExceptions="true"
   convertWarningsToExceptions="true"
   forceCoversAnnotation="false"
   mapTestClassNameToCoveredClassName="false"
   printerClass="PHPUnit_TextUI_ResultPrinter"
   processIsolation="false"
   stopOnError="false"
   stopOnFailure="false"
   stopOnIncomplete="false"
   stopOnSkipped="false"
   testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
   timeoutForSmallTests="1"
   timeoutForMediumTests="10"
   timeoutForLargeTests="60"
   strict="false"
   verbose="false">
</phpunit>

Ранее я использовал более короткую версию этой конфигурации, которая давала тот же результат.

<phpunit
   beStrictAboutOutputDuringTests="false"
   strict="false"
   colors="false">
</phpunit>
7 голосов | спросил Andreas B 6 SatEurope/Moscow2014-12-06T11:55:11+03:00Europe/Moscow12bEurope/MoscowSat, 06 Dec 2014 11:55:11 +0300 2014, 11:55:11

3 ответа


0

Глядя на код, доступный в GitHub , кажется , что независимо от того, что может сказать документация, Проблема с выходной буферизацией отмечена и всегда сообщается .

Таким образом, наблюдаемые симптомы не означают, что тесты выполняются в режиме strict.

  

github.com/sebastianbergmann/phpunit/blob/4.3/src/Framework /TestCase.php#L818

 // ...

try {
    $this->stopOutputBuffering();
} catch (PHPUnit_Framework_RiskyTestError $_e) {
    if (!isset($e)) {
        $e = $_e;
    }
}
  

github.com/sebastianbergmann/phpunit/blob/4.3/src /Framework/TestCase.php#L1938-L1946

private function stopOutputBuffering()
{
    if (ob_get_level() != $this->outputBufferingLevel) {
        while (ob_get_level() > 0) {
            ob_end_clean();
        }
        throw new PHPUnit_Framework_RiskyTestError(
            'Test code or tested code did not (only) close its own output buffers'
        );
    }

    // ...

    $this->outputBufferingActive = false;
    $this->outputBufferingLevel  = ob_get_level();
}

Размещение точки останова в вышеуказанных строках в вашем любимом тестовом отладчике PHPUnit может выявить некоторые другие зависимости (например, disallowTestOutput flag ...?)

ответил xmojmr 10 AMpFri, 10 Apr 2015 10:43:39 +030043Friday 2015, 10:43:39
0

Найдите в своей базе кодов сообщение об ошибке. Возможно, вы включили строгий режим в своем коде. error_reporting(E_NOTICE) достаточно, чтобы вызвать опасное предупреждение, которое вы получаете.

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

ответил Jeremy Giberson 9 PMpThu, 09 Apr 2015 21:21:37 +030021Thursday 2015, 21:21:37
0

Исходя из результатов, я считаю, что я прав, предполагая, что вы проводите только один тест, поэтому настройка --stop-on-risky здесь не поможет.

Я рекомендую убедиться, что вы закрываете выходную буферизацию в самом коде. Если вы когда-либо используете что-то вроде ob_start, убедитесь, что вы вызываете ob_end_clean или ob_end_flush до того, как ваш скрипт перестанет выполняться.

В качестве второй мысли, возможно, попробуйте передать флаги -d и -v при запуске, чтобы увидеть, дает ли он вам больше информации.

ответил voldemortensen 10 AMpFri, 10 Apr 2015 00:08:32 +030008Friday 2015, 00:08:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132