2012-02-09 2 views
1

상황

나중에 검토 할 수 있도록 DBU에 테스트 결과를 기록하는 PHPUnit 용 리스너를 구현 중입니다. 오류, 건너 뛴 또는 불완전한 테스트가 발생하면 기본 정보 인 phpunit 출력을 콘솔에 표시하는 것을 좋아합니다.리스너를 사용하여 PHPUnit의 출력 결과를 모방 할 수 있습니까?

예 :

1) sandbox_ExtensionSampleTest::testError 
printf(): Too few arguments 

E:\ecom_testing\tests_v2\TestSuites\sandbox\Base.php:28 
E:\ecom_testing\tests_v2\TestSuites\sandbox\ExtensionSampleTest.php:37 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:939 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:801 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestResult.php:649 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestCase.php:748 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestSuite.php:772 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\Framework\TestSuite.php:745 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\TestRunner.php:325 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\Command.php:187 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\pear\PHPUnit\TextUI\Command.php:125 
C:\Program Files (x86)\EasyPHP-5.3.8.1\php\pear\phpunit:44 

FAILURES! 
Tests: 1, Assertions: 0, Errors: 1. 

참고 : I 출력의 모든 phpunit을 종속성을 나열하는 a bug 찾을 않았지만, 위의 예는 여전히 두 개의 관련 테스트 파일을 보여줍니다. 구현 된 수신기에있어서의 파라미터의

질문

하나 Exception $e이다. $e을 사용하여 첫 번째 줄뿐만 아니라 메시지를받을 수도 있지만 나머지 줄은 확보 할 수 없습니다.

PHP 매뉴얼에 예외를 읽은 후, 나는 ... 일 것이다 $e->getPrevious()를 사용하여 생각 다음을 수행하려고 시도 : 작동하지 않았다

// Storing in a array to put into a DB later 
// First line with the message 
$trace[] = sprintf(
    "%s\n\n%s:%s\n", 
    $e->getMessage(), 
    $e->getFile(), 
    $e->getLine() 
); 

// Go through the rest of the exceptions of files and lines 
while ($e = $e->getPrevious()){ 
    $trace[] = sprintf(
     "%s:%s\n", 
     $e->getFile(), 
     $e->getLine() 
    ); 
} 

. $e->getPrevious()이 비어있는 것 같아요. 오브젝트를 버리면 확인했습니다. 저도 같은 결과를 얻을 것이다 $e->getTraceAsString() 같은 것을 생각하지만, 나는 (나는 많은 예외를 사용하지 않은)

답변

0

파일과 줄 번호 조합의 목록 stack trace라고 기대했던 아니에요. Exception::getTrace()을 사용하여 배열로 가져 와서 직접 걸어 보거나 PHPUnit이 PHPUnit_Util_Filter::getFilteredStacktrace()을 호출하여 클래스를 필터링하도록 할 수 있습니다. 포맷 된 문자열을받을 수있는 예외 $etrue에 합격하거나, 다시 대신 필터링 된 배열을 얻을 수 false를 전달합니다.

+0

엄청나게, 내가 원하는 것. 감사! – NkM

관련 문제