2017-04-06 9 views
10

To zdarza się tylko w moim systemie. Nikt inny nie mógłby go odtworzyć. Jeśli komunikat o błędzie jest zbyt duży (około 65k bajtów w moim przypadku) nic nie zostanie wydrukowane na ekranie. Używam PHP 7.1.3 na Windows 7, z domyślnym php.ini (limit pamięci ustawiony na 8 gb) i domyślną konfiguracją PHPUnit 6.0.13. Błąd nie pojawia się zarówno w wierszu poleceń, jak i w trybie uprawnień.Co może spowodować, że PHPUnit nie będzie drukować bardzo dużych komunikatów o błędach?

<?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")); 
    } 
} 

?> 

A to co mam na ekranie:

PHPUnit 6.0.13 by Sebastian Bergmann i współpracowników.

Czas: PHPDBG 7.1.3 Konfiguracja: ..............

K 01/01 (100%)

Czas: 361 ms pamięci 6.00 MB

było 1 awaria:

1) SomeTest :: testBigDump

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

AWARIE! Testy: 1, Asercje: 1, Awarie: 1.

Czy masz pojęcie, co może spowodować? Z góry dziękuję.

+0

pamięci PHP wydaje się być w porządku. Otrzymasz inny błąd. Czy próbowałeś przekierować wyjście testu do pliku? Może twój wiersz poleceń ma za mało pamięci do wyświetlenia tak długiego łańcucha. Byłoby pomocne, gdyby można opublikować pełny przykład pracy zamiast pseudo kodu, aby inni mogli spróbować go replikować. –

+0

to nie jest pseudo kod. to wystarczy, aby spowodować błąd – Wes

Odpowiedz

9

Coś w konfiguracji działa testu phpunit poprzez phpdbg

Mam odtworzył ten problem, starając się replikować środowisko jak najwięcej przy użyciu Windows 7 VM.

Wskazówką była linia Runtime: PHPDBG w Twoim zrzucie. Najwyraźniej coś o środowisku wykonawczym phpdbg uniemożliwia prawidłowe działanie dużych buforów. Zobacz moje wyjście poniżej, zarówno początkową wyjścia podczas uruchamiania poprzez phpdbg.exe (brak opisu testu), a następnie, gdy prowadzony przez php.exe (skrócony, oczywiście):

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 ----- 
Powiązane problemy