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

Что может заставить PHPUnit не печатать очень большие сообщения об ошибках?

Это похоже на мою систему. Никто другой не смог бы воспроизвести его. Если сообщение об ошибке слишком велико (около 65 тыс. Байт в моем случае), на экране ничего не печатается. Я использую PHP 7.1.3 в Windows 7 с установленным по умолчанию php.ini(ограничение памяти до 8gb) и настройкой по умолчанию PHPUnit 6.0.13. Ошибка не появляется как в приглашении, так и в powershell.

<?php

use PHPUnit\Framework\Constraint\Constraint;
use PHPUnit\Framework\TestCase;

class MyConstraint extends Constraint
{
    protected $expected;

    function __construct($expected){
        parent::__construct();
        $this->expected = $expected;
    }

    protected function matches($actual){
        return false;
    }

    function failureDescription($other): string{
        return "desc";
    }

    function toString(){
        return "description";
    }

    function additionalFailureDescription($other): string{
        return str_repeat("x", 100000);
        // If set to a smaller dump, error will appear
        // some people I asked to try could dump one million
        // bytes without problems, while I can't print more
        // than about 50k
    }
}

class SomeTest extends TestCase
{
    function testBigDump(){
        TestCase::assertThat("irrelevant", new MyConstraint("irrelevant"));
    }
}

?>

И вот что я получаю на экране:

PHPUnit 6.0.13 от Себастьяна Бергмана и участников.

Время выполнения: PHPDBG 7.1.3 Конфигурация:..............

F 1/1 (100%)

Время: 361 мс, память: 6,00 МБ

Произошел 1 сбой:

1) SomeTest:: testBigDump

                             <------- Notice no error description here

FAILURES! Тесты: 1, Утверждения: 1, Отказы: 1.

Есть ли у вас какие-либо идеи, что может вызвать это? Заранее благодарю вас.

4b9b3361

Ответ 1

Что-то в вашей конфигурации запускает phpunit test через phpdbg

Я воссоздал эту проблему, пытаясь максимально реплицировать среду с помощью виртуальной машины Windows 7.

Подсказка была в строке Runtime: PHPDBG на вашем дампе. По-видимому, что-то о запуске phpdbg предотвращает правильную работу больших буферов. См. Мой вывод ниже, как исходный вывод при запуске через phpdbg.exe(отсутствует описание теста), а затем при запуске через php.exe(усеченный, очевидно):

C:\project>phpdbg -r phpunit-6.1.0.phar -v test.php
[Welcome to phpdbg, the interactive PHP debugger, v0.5.0]
To get help using phpdbg type "help" and press enter
[Please report bugs to <http://bugs.php.net/report.php>]
PHPUnit 6.1.0 by Sebastian Bergmann and contributors.

Runtime:       PHPDBG 7.1.4

F                                                                   1 / 1 (100%)


Time: 99 ms, Memory: 22.00MB

There was 1 failure:

1) SomeTest::testBigDump

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
[Script ended normally]

C:\project>php phpunit-6.1.0.phar test.php
PHPUnit 6.1.0 by Sebastian Bergmann and contributors.

F                                                                   1 / 1 (100%)


Time: 109 ms, Memory: 8.00MB

There was 1 failure:

1) SomeTest::testBigDump
Failed asserting that desc.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
----- Snip -----