Подтвердить что ты не робот

PHPUnit - ничего не делает, никаких ошибок, нет вывода

Извините, что другой вопрос "phpunit не работает". Он работал уже много лет. Сегодня я переустановил PEAR и phpunit по причинам, не связанным с этой проблемой. Теперь, когда я запускаю phpunit, как обычно. Ничего не произошло. Cli просто показывает мне новую строку, без выхода.

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

PHPUnit Version: 3.5.15 
PEAR Version: 1.9.4 
PHP Version: 5.3.8 
Windows 7
4b9b3361

Ответ 1

Создайте простейший тестовый класс без bootstrap.php или phpunit.xml, чтобы убедиться, что ваша новая установка работает. PHPUnit остановится без какого-либо сообщения, если он не сможет создать экземпляр всех тестовых примеров - по одному для каждого метода тестирования и поставщика данных - перед выполнением любых тестов.

Ответ 2

Я на OSX и MAMP. Чтобы получить сообщения об ошибках, мне пришлось настроить следующие записи в php.ini:

display_errors = On
display_startup_errors = On

Пожалуйста, не нужно, чтобы это произошло в /Applications/MAMP/bin/php/php5.3.6/conf/php.ini.

Ответ 3

В будущем для тех, кто сталкивается с любой проблемой с PHPUnit, а PHPUnit терпит неудачу, просто добавьте эти три строки внутри phpunit.xml:

<phpunit ....... >
    ...
    ...
    <php>
         <ini name="display_errors" value="true"/>
    </php>
</phpunit>

После этого снова запустите тесты, и теперь вы можете увидеть, почему PHPUnit не работает,

И... НАСЛАЖДАЙТЕ ТЕСТИРОВАНИЕ ЕДИНИЦЫ:)

Ответ 4

Я знаю, что вопрос о плакате orignal уже ответил, но только для людей, которые ищут в будущем: одна вещь, которая может заставить PHPUnit терпеть неудачу молча (т.е. просто прекращает выполнение тестов, не сообщая вам, почему) заключается в том, что она имеет ошибку который он настроил перед каждым тестовым прогоном, который предназначен для захвата ошибок и отображения их в конце тестового прогона. Проблема в том, что некоторые ошибки останавливают выполнение всего тестового прогона.

Что я обычно делаю, когда это происходит, в качестве первого шага, это reset обработчик ошибок к тому, что немедленно выведет сообщение об ошибке. В моем базовом тестовом классе у меня есть метод под названием setVerboseErrorHandler, который я вызову в верхней части теста (или в setUp), когда это произойдет. Для этого ниже требуется php 5.3 или выше (из-за закрытия), поэтому, если вы на 5.2 или ниже, вы можете сделать его обычной функцией.

protected function setVerboseErrorHandler() 
{
    $handler = function($errorNumber, $errorString, $errorFile, $errorLine) {
        echo "
ERROR INFO
Message: $errorString
File: $errorFile
Line: $errorLine
";
    };
    set_error_handler($handler);        
}

Ответ 5

Вы уже поняли, как заставить его работать, но мое решение было немного другим.

Первое, что вы можете сделать, это проверить статус выхода. Если это не 0, то PHP вышел, и из-за установленных параметров конфигурации INI не было выведено ни одного сообщения об ошибках PHP. Что я сделал, так это включить настройку INI "display_errors" и установить "error_reporting" на E_ALL. Затем я смог идентифицировать ошибки, такие как PHP, не способный анализировать определенный script. Как только я исправил это, PHPUnit работал правильно.

Ответ 6

Мне удалось эффектно нарисовать себя в углу с обычным "фатальным обработчиком ошибок", который в некоторых редких условиях не выдавал ничего. Эти условия, в соответствии с законом Мерфи, материализовались, как только я забыл, что обработчик был на месте.

Поскольку это была не "проблема с PHPunit", ни один из других ответов не помог [хотя проблема @David была внизу той же самой вещи], хотя симптомы были одинаковыми - phpunit завершался без вывода, no ошибки, нет журнала и никаких подсказок.

В конце концов, мне пришлось прибегнуть к пошаговой трассировке всего набора тестов, добавив это в код начальной загрузки:

register_shutdown_function(function() {
    foreach ($GLOBALS['lastStack'] as $i => $frame) {
        print "{$i}. {$frame['file']} +{$frame['line']} in function {$frame['function']}\n";
    }
});
register_tick_function(function() {
    $GLOBALS['lastStack'] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 8);
});
declare(ticks=1);

Если кому-либо удастся сделать хуже, чем это, и каким-то образом заблокировать stdout, эта модификация должна работать:

register_shutdown_function(function() {
    $fp = fopen("/tmp/path-to-debugfile.txt", "w");
    foreach ($GLOBALS['lastStack'] as $i => $frame) {
        fwrite($fp, "{$i}. {$frame['file']} +{$frame['line']} in function {$frame['function']}\n");
    }
    fclose($fp);
});

Ответ 7

Убедитесь, что вы не записали какую-либо логику в свой код, который просто умирает, без вывода. Например,

<?php

if (!array_key_exists('SERVER_NAME', $_SERVER)) {
    die();
}

Это был именно мой случай; Я сделал некоторые предположения об окружающей среде, которые были правильными при запуске кода через Apache, но не выполнялись при запуске из CLI, и код не выдавал никакого выхода.

PHPUnit попытался включить файл bootstrap перед тем, как предоставить обычный вывод init, но умер во время процесса начальной загрузки, следовательно, вышел со статусом 0 и без вывода.

Ответ 8

старый поток этот, но один я наткнулся на него, имея ту же проблему.

У меня была такая же проблема, ничего не возвращалось в консоль, включая print, print_r, echo и т.д.

решил его использовать с помощью --stderr в качестве опции test-runner.

Ответ 9

Если при запуске из командной строки появилась последняя версия phpunit, такая как

> php phpunit
or
> ./phpunit
or
> php ./phpunit.phar
or
> ./phpunit.phar

И вы сразу возвращаетесь в приглашение без сообщений, возможно, это связано с настройкой "suhosin secutiry". phpunit теперь представляет собой пакет "phar", включающий все библиотеки. Чтобы иметь возможность запускать такой файл, когда php имеет защищенный модуль suhosin, вы должны сначала установить этот

suhosin.executor.include.whitelist = phar

в файл php.ini(например, с debian/ubuntu, возможно, вам придется отредактировать файл/etc/php5/conf.d/suhosin.ini

Ответ 10

Я попробовал все здесь, но ничего не phpunit --no-configuration simpletest.php пока я не попробовал phpunit --no-configuration simpletest.php. это наконец дало мне некоторый вывод, который подразумевает, что мой файл phpunit.xml.dist поврежден. (Я вернусь и обновлю это, как только отлажу.)

содержимое файла simpletest.php приведено ниже, но любой тестовый файл должен работать.

<?php
use PHPUnit\Framework\TestCase;

final class FooTest extends TestCase
{
    public function testFoo()
    {
        $this->assertEquals('x', 'y');
    }
}

Ответ 11

Проверьте, совпадают ли используемые phpunit и те, которые вы установили:

$ pear list phpunit/phpunit
...
script /path/to/phpunit
...

Попробуйте выполнить именно этот phpunit с полным путем.

Затем проверьте свою переменную PATH и посмотрите, есть ли в ней правильный каталог. Если нет, исправьте это.


Если это не помогает, используйте что-то пишите в исполняемый файл phpunit, например. "echo 123;" и запустить phpunit. Проверьте, видите ли вы это.

Ответ 12

Для меня конфликт был с директивой Xdebug

xdebug.remote_enable=1