2012-01-09 3 views
11

나는 phpunit 테스트에서 echo 물건을 시도했지만 지금까지는 행운이 없습니다.phpunit 테스트의 반향

xml 구성 파일에 대한 설명서를 읽었으며 외관상으로는 debug 매개 변수가 찾고있는 것입니다. 불행히도 여전히 작동하지 않습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit colors="true" 
     processIsolation="true" 
     verbose="true" 
     debug="true"> 
</phpunit> 

모두 processIsolation 및 허용됩니다 verbose하지만 debug가 없습니다 : 여하튼 여기 내 XML 설정 파일입니다.

phpunit --debug MyTest.php # here stuff is echoed correctly 

을하지만, XML의 설정과는 무시됩니다 것 같습니다 파일 : 내가 직접이 같은 phpunit을하기를 통과 할 때

이 명령은 실제로 꽤 잘 작동합니다.

답변

15

현재 버전의 PHPUnit >3.6.4 (및 모든 3.5.* 버전)은 테스트 케이스에 echo의 모든 것을 인쇄합니다.

<?php 

class OutputTestCase extends PHPUnit_Framework_TestCase { 

    public function testEcho() { 
     echo "Hi"; 
    } 
} 

가 생성됩니다

phpunit foo.php 
PHPUnit 3.6.7 by Sebastian Bergmann. 

.Hi 

Time: 0 seconds, Memory: 3.25Mb 

OK (1 test, 0 assertions) 

당신이 오래된 3.6 버전에있는 경우 그러니 그냥 업그레이드 :

+2

은 이미 나는 그것을 할 수 없습니다. 어떻게 OutputTestCase를 시작 했습니까? 만약 당신이 그것을 시작했다면 phpunit --debug OutputTestCase.php 그렇다면 제대로 작동하지 않습니다. – nourdine

+2

나는 ** phpunit> 3.6.4가 필요하다는 것을 알려주었습니다. 3.6.3을 사용하면 --debug를 실행하지 않고도 출력을 얻을 수 없습니다. 당신이 PHPUnit의 동작이 바뀌면 작동 할 것입니다. :) – edorian

+7

이것은 버전 4.1에서 전혀 작동하지 않는 것 같습니다. --debug 옵션을 사용하는 경우에도 마찬가지입니다 ... –

3

를 확인하면 전화 종료() 또는 죽이지 않는다(). PHPUnit은 echo 문을 버퍼링합니다. 테스트 중에 스크립트가 종료되면 버퍼는 출력되지 않고 손실됩니다.

1

processIsolation은 테스트 출력을 억제하므로 비활성화해야합니다. debug 플래그의 상호 작용은 아마도이 함께 도입 된 감독이었다 테스트 시간이 오래 걸리고 테스트 클래스에 다음 메서드를 추가하는 과정에서 출력을보고 싶은 경우 https://github.com/sebastianbergmann/phpunit/pull/1489

+2

이 링크가 질문에 대답 할 수 있지만 여기에 답변의 핵심 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/13915236) – Serjik

+0

나는 무엇을 의미하는지 모르겠다. 모든 관련 정보는 답변에 포함되어있다. –

+0

받아 들여진 대답을 보면 완전히 설명하고 예제를 제공합니다. 잠재 고객은 질문자가 아닌 우주 전체 – Serjik

0

: 당신이 당신의 테스트 클래스 내부 $this->prontoPrint($variable)를 호출 할 때마다

protected function prontoPrint($whatever = 'I am printed!') 
{ 
    // if output buffer has not started yet 
    if (ob_get_level() == 0) { 
     // current buffer existence 
     $hasBuffer = false; 
     // start the buffer 
     ob_start(); 
    } else { 
     // current buffer existence 
     $hasBuffer = true; 
    } 

    // echo to output 
    echo $whatever; 

    // flush current buffer to output stream 
    ob_flush(); 
    flush(); 
    ob_end_flush(); 

    // if there were a buffer before this method was called 
    //  in my version of PHPUNIT it has its own buffer running 
    if ($hasBuffer) { 
     // start the output buffer again 
     ob_start(); 
    } 
} 

지금 즉시 콘솔의 텍스트를 표시합니다. 나는이 함수를 쓰기 위해 php.net comment을 사용했다. 나는 3.6.3 오전

PHPUnit 5.7.21PHP 5.6.31 with Xdebug 2.5.5

+0

여하튼이 솔루션은 사용 된 버퍼를 정리하지 않습니다.이 메시지를 피하기 위해 다시 작성할 수 있습니다 : '테스트 코드 또는 테스트 된 코드는 자신의 출력 버퍼를 닫지 않았다. – serup