코어 포인트
PHPUnit은 PHP 네이티브 오류 처리를 예외로 변환하여 테스트 중에 코드 실행 흐름을 변경할 수 있습니다. 함수를 사용하여 코드를 테스트 할 때 문제가 발생할 수 있습니다.
PHPUNIT는 오류를 예외로 변환하여 프로덕션 환경과의 개발 및 테스트에서 코드가 다르게 행동하게합니다. 오류가 발생하면 실행 프로세스가 변경되기 때문입니다.
를 사용하여 코드를 정확하게 테스트하려면 사용자 정의 오류 핸들러를 사용하여 어설 션을 사용하여 나중에 분석을위한 오류 정보를 캡처 할 수 있습니다. 이를 통해 코드는 계속 실행할 수 있으며 여전히 제기 된 오류 조건을 확인할 수 있습니다. -
단위의 기본 동작은 정확한 테스트에 중요합니다. 트리거 후 논리의 경우 PHPUnit의 기능을 보충하면 가능한 한 생산 환경에 가깝게 정확한 테스트를 촉진 할 수 있습니다.
trigger_error()
php aviation functions를 사용하여 오류 메시지를 기록하는 코드를 유지하고 있다고 가정합니다. 한편, PhPunit을 사용하여 해당 코드에 대한 단위 테스트를 작성하고 있습니다. PHPUnit 매뉴얼을 참조하는 경우 오류 조건을 테스트하는 방법에 전념하는 섹션이 있습니다. PHPUit은 오류, 경고 및 알림을 예외로 변환하는 자체 오류 핸들러를 구현하는 방법을 설명하며 이러한 예외를 포착하는 것은 이러한 오류 테스트를 처리하는 방법입니다. 그러나 코드의 모양에 따라 PHPUnit과 함께이 접근법에 문제가있을 수 있습니다. 이 기사는이 문제가 무엇인지, 그것이 코드를 테스트하는 능력에 어떤 영향을 미치는지, 그리고이를 해결하는 방법에 대해 자세히 설명합니다.
문제는 무엇입니까? -
오류와 예외는 근본적으로 다른 방식으로 행동합니다. 특히,이 기사와 관련하여, 오류 수준 상수가 전달 된 경우 치명적인 오류가 표시되지 않으면 직후에 코드 실행이 계속 될 수 있습니다. 예외가 발생하면 예외 클래스에 해당하는
trigger_error()
블록의 시작 부분에서 실행이 계속되며, 이는 예외가 발생한 지점 직후에 발생하거나 발생하지 않을 수 있습니다. 이러한 행동의 몇 가지 예를 살펴 보겠습니다. 우선, 오류입니다.
-
위 코드를 실행하면 다음 출력이 나타납니다.
이로부터 우리는 이후의 진술이 실행된다는 것을 알 수 있습니다. 이제 예외입니다.
출력 :
trigger_error()
오류 예제와 달리 예외가 발생한 후 코드가 실행되지 않습니다. PHPUnit은 오류를 예외로 변환하기 때문에 오류는 단위 테스트에서 예외와 동일하게 작동합니다. 테스트 중에 오류가 발생한 후 실행 된 모든 코드는 실행되지 않습니다. 또 다른 예를 제시하십시오 :
오류-예고로 변환하면 오류가 예외로 변환되면 코드가 실행되지 않기 때문에
를 유용하게 처리하는지 테스트하는 것이 불가능합니다. phpUnit 동작의 부작용
이 오류-예고로 변환하면 코드가 생산 환경과는 다른 개발 및 테스트에서 다르게 행동하게됩니다. 예는 다음과 같습니다.
출력 :
첫 번째 <?php
error_reporting(E_ALL | E_STRICT);
echo "Before warning\n";
trigger_error("Danger Will Robinson!", E_USER_WARNING);
echo "After warning\n";
?>
로그인 후 복사
호출 (이 기간 동안 오류를 예외로 변환하는 사용자 정의 오류 핸들러가 적용됩니다)은 NULL을 출력합니다. 두 번째 호출 (PHP의 기본 오류 핸들러가 적용되는 동안)은 트리거 된 오류에 대한 정보를 출력합니다. 이는 첫 번째 통화 출력 NULL이 사용자 정의 오류 핸들러를 사용하여 발생하기 때문이 아니라 오류 핸들러가 예외를 던지기 때문입니다. 이 예제에 표시된 오류 핸들러가이를 수행하지 않으면 첫 번째 <🎜 콜 호출의 출력이 두 번째 호출과 동일합니다.
<🎜 🎜> <<> 솔루션 <code>Before warning
PHP Warning: Danger Will Robinson! in /home/matt/error_handler.php on line 4
After warning</code>
로그인 후 복사
우리는 테스트중인 코드를 계속 실행하면서 오류 조건이 제기되었는지 확인할 수있는 솔루션이 필요합니다. 위의 예에서 볼 수 있듯이 오류를 예외로 변환하지 않는 사용자 정의 오류 핸들러를 사용하여 코드 실행을 계속할 수 있습니다. 이 오류 핸들러가해야 할 일은 나중에 어설 션을 사용하여 분석 할 수 있도록 오류 메시지를 캡처하는 것입니다. 이것은 다음과 같습니다. var_dump()
var_dump()
<🎜 🎜> <<> (각 테스트 방법 앞에서 실행)는 오류 핸들러를 설정하는데, 이는 각 오류에 대한 정보를 배열에 저장하는 동일한 클래스의 다른 메소드입니다. 그런 다음 다른 방법 (예 : )은 테스트 메소드 (예 : var_dump()
)에 의해이 오류 메시지에 대한 어설 션을 수행하고 예상 오류와 비교하여 트리거 된 오류와 같은 출력 관련 디버그 정보를 수행합니다. 다른 유용한 어설 션 유형으로는 논리적 역전 (즉, 어설 션이 특정 오류를 유발하지 않음), 메시지를 정규 표현식과 일치시키는 오류 또는 트리거 된 오류 수가 포함됩니다. var_dump()
<🎜 🎜> <<> 결론
테스트의 오류를 트리거하는 논리가 여전히 실행 중인지 상관하지 않으면 PHPUnit의 기본 동작이 귀하의 요구에 완벽하게 적합합니다. 그러나 행동의 의미를 이해하는 것이 중요합니다. 그러한 논리의 실행에 관심이 있다면 가능한 한 프로덕션 환경에 가까운 코드 테스트를 용이하게하기 위해 PhPunit의 기능을 보완하는 방법을 알고 있어야합니다.
<<> Fotolia의 사진
<<> (다음은 FAQ, 형식과 표현식은 원래 콘텐츠에 따라 조정되었으며 일부 문제가 병합되거나 단순화되었습니다) <🎜 🎜> <?php
try {
echo "Before exception\n";
throw new Exception("Danger Will Robinson!");
echo "After exception\n";
}
catch (Exception $e) {
echo "In catch block\n";
}
?>
로그인 후 복사
phpunit을 사용하여 오류 조건을 테스트하기 위해 FAQ (FAQ)
setUp()
Q1 : PHPUnit이 콘솔에 오류가 표시되지 않는 이유는 무엇입니까? assertError()
PHPUNIT는 오류 및 예외를 효과적으로 테스트 할 수있는 방식으로 설계되었습니다. 콘솔에 오류가 표시되지 않으면 PHPUnit이이를 캡처하여 실패한 테스트로 취급 할 수 있습니다. 이러한 오류의 세부 사항을 보려면 테스트를 실행할 때 옵션을 사용할 수 있습니다. 테스트 중에 잡힌 오류 또는 예외를 포함하여보다 자세한 출력이 제공됩니다. --debug
Q2 : PhPunit에서 예외가 발생했다고 주장하는 방법은 무엇입니까?
PHPUNIT는 예외를 처리하는 데 특별히 사용되는 일련의 주장을 제공합니다. 가장 일반적으로 사용되는 것은 이며, 이는 당신이 던질 것으로 예상되는 예외 유형을 지정하는 데 사용할 수 있습니다. 테스트 중에 지정된 예외가 발생하면 테스트가 통과됩니다. 그렇지 않으면 테스트가 실패합니다. 이를 통해 오류 조건의 올바른 처리를 구체적으로 확인하는 테스트를 작성할 수 있습니다.
Q3 : PHP에서 오류보고는 어떻게 작동합니까?
PHP의 오류보고 기능을 사용하면보고 된 오류 및 처리 방법을 제어 할 수 있습니다. 기본적으로 모든 오류 가보고되어 표시됩니다. 그러나 ini 지시문을 사용하여 이러한 설정을 변경할 수 있습니다. 이를 통해 특정 유형의 오류를 숨기거나 로그 오류를 표시하는 대신 로그 오류가 발생할 수 있습니다.
Q4 : phpUnit의 예외를 테스트하는 방법은 무엇입니까? expectException()
Q2와 동일합니다.
Q5 : phpunit에 대한 테스트를 작성하는 방법은 무엇입니까?
PhPunit에 대한 테스트 작성에는 phpunitframeworkTestScase 클래스를 확장하는 새로운 테스트 케이스 클래스를 만드는 것이 포함됩니다. 각 테스트는 "테스트"라는 단어로 시작 하여이 클래스의 공개 방법입니다. 각 테스트 방법 내에서 PhPunit의 어설 션을 사용하여 코드가 예상대로 실행 중인지 확인할 수 있습니다. 예를 들어, 메소드를 사용하여 함수가 예상 결과를 반환하는지 확인할 수 있습니다.
Q6 : phpUnit의 오류를 처리하는 방법은 무엇입니까?
PHPUNIT는 오류를 처리하는 데 특별히 사용되는 일련의 어설 션을 제공합니다. 가장 일반적으로 사용되는 것은 이며, 트리거 할 오류 유형을 지정하는 데 사용할 수 있습니다. 테스트 중에 지정된 오류가 트리거되면 테스트가 통과됩니다. 그렇지 않으면 테스트가 실패합니다. 이를 통해 오류 조건의 올바른 처리를 구체적으로 확인하는 테스트를 작성할 수 있습니다. error_reporting()
Q7 : PhPunit에서 테스트를 디버그하는 방법은 무엇입니까? display_errors
PHPUNIT는 디버깅 테스트를위한 몇 가지 옵션을 제공합니다. ,
및 옵션을 사용하여 테스트 실행을 중지하는 데 사용될 수 있습니다. 이를 통해 문제를 쉽게 식별하고 해결할 수 있습니다.
Q8 : phpUnit에서 오류 조건을 테스트하는 방법은 무엇입니까? PHPUNIT는 오류 조건을 테스트하는 몇 가지 방법을 제공합니다. 메소드를 사용하면 트리거 할 오류 유형을 지정할 수 있습니다. expectError()
메소드를 사용하면 트리거 할 경고 유형을 지정할 수 있습니다. 테스트 중에 지정된 오류 또는 경고가 트리거되면 테스트가 통과됩니다. 그렇지 않으면 테스트가 실패합니다. expectWarning()
Q9 : phpunit의 경고를 처리하는 방법?
PHPUNIT는 경고를 처리하는 데 특별히 사용되는 일련의 주장을 제공합니다. 가장 일반적으로 사용되는 것은 이며, 이는 트리거 할 경고 유형을 지정하는 데 사용할 수 있습니다. 테스트 중에 지정된 경고가 트리거되면 테스트가 통과됩니다. 그렇지 않으면 테스트가 실패합니다. 이를 통해 경고 조건의 올바른 처리를 구체적으로 확인하는 테스트를 작성할 수 있습니다.
Q10 : PhPunit에서 데이터 제공 업체를 사용하는 방법은 무엇입니까?
데이터 제공 업체는 다른 데이터 세트로 여러 번 테스트를 실행할 수있는 PHPUnit의 강력한 기능입니다. 데이터 제공자를 사용하려면 배열 배열을 반환하는 메소드를 만들 수 있습니다. 각 내부 배열은 테스트를위한 매개 변수 세트입니다. 그런 다음
를 사용하여 테스트 방법을 주석 한 다음 데이터 제공자 메소드의 이름을 사용합니다. 그런 다음 PHPUnit은 각 매개 변수 세트에 대해 테스트를 한 번 실행하고 매개 변수를 테스트 방법으로 전달합니다.
위 내용은 PHP 마스터 | PHPUNIT를 사용한 오류 조건 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!