2010-03-09 8 views
2

필자는 PHPUnit에서 머리를 맞대고 기존 클래스에 대한 테스트 케이스를 작성하려고합니다.Unit testing classes - 질문에 오류가 있습니까?

클래스는 응용 프로그램에서 사용할 수있는 구성 옵션을 가져오고 설정하고 나열하는 정적 구성 클래스입니다.

클래스는 매우 엄격하게 구축됩니다. 호환되지 않는 값 또는 존재하지 않는 구성 설정으로 구성 설정을 시도하면 E_USER_ERROR이 발생하고 스크립트 실행이 중지됩니다. 오류 처리의 훌륭한 기술이 아니더라도이 클래스의 목적에 맞게 잘 작동합니다. 해당 클래스의 오류는 항상 프로그래밍 오류의 결과이며 잘못된 사용자 입력이 아닙니다.

이렇게하면 오류 메시지가 처리되거나 기록되는 방식에 대해 걱정할 필요가 없어 코드를 슬림하게 유지할 수 있다는 장점이 있습니다. 출력 메시지 (또는 생산하지 않음), 종료(), 완료.

그러나 Unit 테스트에서는 고전적인 PHP 오류로 어떻게 작업을 계속할 수 있는지 알지 못합니다. 성공 플래그를 반환하거나 예외를 throw하도록 함수를 변환해야합니다.

맞습니까?

PHPUnit에서 예외를 예상 할 수있는 방법이 있습니까? 예외가 예상됩니까? 나는 곧장 볼 수 없다.

답변

7

:

기본적으로는 phpunit을는 PHP 에러, 경고 및 예외에 대한 테스트의 실행 중에 트리거 통지를 변환한다. 이러한 예외를 사용하면 예를 들어 Example 4.8에서와 같이 PHP 오류를 트리거하는 테스트가있을 수 있습니다. 물론 예외

class ExpectedErrorTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @expectedException PHPUnit_Framework_Error 
    */ 
    public function testFailingInclude() 
    { 
     include 'not_existing_file.php'; 
    } 
} 

동일하게 작동합니다.

편집 :이 이미 댓글에서 언급했다 보지 않았다, 그러나 나는 다른 사람이 같은 질문에 대한 외모와 의견을 읽고하지 않는 경우 참조를 위해 여기를 떠날거야

+0

그래, @ 빔 이미 그 단락을 지적했다, 나는 완전히 그것을 overread. 브릴리언트, 나는 아무것도 바꿀 필요가 없을 것이다. –

+2

+1은 우리와 마찬가지로 눈이 멀지 않기 때문에;). – middus

+0

@Pekka 죄송합니다. 보지 못했습니다. 최근에 PHPUnit에 관한 여러 가지 질문을하는 것으로 보입니다. http://www.phphatesme.com/blog/qualitatssicherung/phpunit-eine-einfuhrung/ (독일어) – Gordon

1

구현의 세부 사항을 알 수는 없지만 정상적인 (사용자 지정) 예외 (테스트 할 수 있음)를 발생시키고 응용 프로그램에 전역 예외 처리기를 사용하여 적절한 E_USER_ERROR를 throw합니다 이러한 (사용자 정의) 예외?

이 글로벌 예외 처리기 설정에 대한 자세한 내용은 set_exception_handler을 확인하십시오.

+0

제대로 이해하면 클래스가 원래 동작을 유지하면서 단위 테스트에서 작동하게됩니다. 나에게 좋은 소리! +1 –

+0

나는 그것을 이해 했으므로 예외를 던지기 위해 클래스를 변경해야합니다. – middus

+2

BTW 명백하게 PHPUnit은 오류,주의 사항 및 경고도 테스트 할 수 있어야합니다. http://www.phpunit.de/manual/3.2/en/writing-tests-for-phpunit.html#writing-tests-for- phpunit.errors (PHPUnit : p 입문). – wimvds

1

단위 테스트의 실패로 PHPUnit에서 처리 할 수없는 오류 (예 : E_USER_ERROR)를 처리 할 오류 처리기 (set_error_handler 통해)를 정의 할 수 없습니까? PHPUnit manual 가입일 (WordPress' tests 의해 고무)

+0

흥미로운 Aah는 @ Wim의 제안과 비슷하지만 반대로, 기존 수업을 접할 필요가 없다는 장점이 있습니다. 아주 좋아, 나는 그것을 먼저 시도 할 것 같아! –

2

경고를 Exception으로 처리를 취소하려면 PHPUnit_Framework_Error_Warning::$enabled=false;을 사용하십시오.

관련 문제