2010-01-29 4 views
2

저는 PHP SimpleTest 프레임 워크를 처음 접했고 실패한 주장이 테스트 방법을 중단시키지 않는다는 사실에 놀랐습니다. 즉,이 시험 보고서에서이 오류 메시지가 발생합니다PHP SimpleTest 프레임 워크를 실패로 구성 할 수 있습니까?

function testFoo() { 
    $this->assertTrue(true, 'first: %s'); 
    $this->assertTrue(false, 'second: %s'); 
    $this->assertTrue(false, 'third: %s'); 
} 

내 단위 테스트 경험의 대부분은 JUnitNUnit 함께, 그리고 그들 모두는 즉시 최초의 주장이 실패로 시험 방법을 중지합니다. 어쩌면 나는 그저 익숙하지 않은 것 같지만, 여분의 실패 메시지가 단지 잡음처럼 보일 것 같습니다. 세미콜론이 없어서 50 개의 오류가 발생하는 오래된 C 컴파일러를 생각 나게합니다.

SimpleTest가 빠르게 실패하도록 구성 할 수 있습니까? 아니면 다른 스타일로만 살면됩니까?

답변

5

Reporter 클래스를 확장/수정하여 paintFail() 후에 exit() 할 수 있습니다.
(필요한 unittests의 어떠한 수정)

또는

어설의 * 기능

예를 들어 그래서, 부울 값을 반환 :

$this->assertTrue(false, 'second: %s') or return; 

은 현재 테스트 기능을 종료하지 않을 것이다.

추신 :
UnitTestCase 대신 PHPUnit_TestCase 클래스를 사용하는 경우 assert * 함수는 부울을 반환하지 않습니다.

1

assert 메서드는 통과 또는 실패에 대한 부울 값을 반환하므로 무언가가 실패 할 때이를 확인하고 테스트를 중지 할 수 있습니다.

저는 이것이 프로젝트의 모든 테스트에 확장 가능하다고 생각하지 않지만, 특히 시끄러운 테스트가 도움이 될 수 있습니다. 문이 코드의 큰 덩어리를 포장하는 경우 사용할 수

function testBar() { 
    $pass = $this->assertTrue(true, 'first: %s'); 
    $pass = $pass && $this->assertTrue(false, 'second: %s'); 
    $pass = $pass && $this->assertTrue(false, 'third: %s'); 
} 

:

다음은 간단한 예입니다.

3

이것은 실제로 질문에 답하지 않고 있지만 가치가있는 부분에 대해서는 PHPUnit이 항상 빨리 실패합니다.

... 테스트가 실패 처음으로, 테스트의 실행이 중단, 그리고 phpunit을가 실패를보고

http://www.phpunit.de/manual/current/en/goals.html는 말한다.

+0

나는 SimpleTest를 정말로 선택하지 않았으며, 단지 CakePHP와 통합되었습니다. 지금까지 PHPUnit을 체크 아웃 할만큼 짜증나는 것은 아닙니다. –

1

모든 테스트가 데이터베이스가 가동 중이기 때문에이 작업이 필요했습니다. 데이터베이스가 다운 된 경우 10,000 개의 오류가있는 화면에 대해서는별로 신경 쓰지 않습니다. simpletest는 오류가 발생하면 즉시 인쇄하므로 PHP 코드 일 뿐이므로 간단한 die 문을 사용하여 테스트를 실제로 중단 할 수 있습니다.

여기 내 중요한 "내 연결됨"테스트에 대한 코드가 나와 있습니다.

enter image description here

물론 내가 요약 라인을 얻을하지 않습니다하지만 내 사용 사례에 대해 내가 필요하거나 내 요약 행을 원하지 않는 : 생산

function testDatabaseAccess() 
{ 
    $connected = TRUE; 
    GLOBAL $clients; 
    $connected &= $this->assertTrue(is_object($clients), 'Clients database not connected.'); 

    GLOBAL $practices; 
    $connected &= $this->assertTrue(is_object($practices), 'Practices database not connected.'); 

    GLOBAL $user; 
    $connected &= $this->assertTrue(is_array($user), 'User not defined.'); 

    GLOBAL $practice; 
    $connected &= $this->assertTrue(is_object($practice), 'Practice database not connected.'); 

    if (!$connected) 
    { 
    die('Not Connected.'); 
    } 
} 

. DB가 없으며 테스트 할 필요가 없습니다. 나머지 테스트에서는 실제로 즉시 실패하지 않는 것이 좋습니다. 나는 보통 한 번에 모든 실패를보고 싶다.