PHPUnit이 예외가 발생했다고 주장합니까?

혹시 이 안에 있는 사람 중에assert테스트 대상 코드에 예외가 발생했는지 여부를 테스트할 수 있는 것 같은 것.



질문에 대한 답변



<?php require_once 'PHPUnit/Framework.php';  class ExceptionTest extends PHPUnit_Framework_TestCase {     public function testException()     {         $this->expectException(InvalidArgumentException::class);         // or for PHPUnit < 5.2         // $this->setExpectedException(InvalidArgumentException::class);          //...and then add your test code that generates the exception          exampleMethod($anInvalidArgument);     } } 

expectException() PHPUnit 매뉴얼

PHPUnit 작성자 기사에서는 예외 테스트의 베스트 프랙티스에 대해 자세히 설명합니다.




PHPUnit 9가 릴리스될 때까지 문서 블록 주석을 사용할 수도 있습니다.

class ExceptionTest extends PHPUnit_Framework_TestCase {     /**      * @expectedException InvalidArgumentException      */     public function testException()     {         ...     } } 

PHP 5.5+(특히 네임슬레이드 코드)의 경우, 저는 이제 를 사용하는 것을 선호합니다.




대체 방법은 다음과 같습니다.

$this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Expected Exception Message'); 

테스트 클래스의 범위가 다음과 같은지 확인하십시오.PHPUnit_Framework_TestCase.




PHP 5.5+에서 실행 중인 경우 해상도를 사용하여 setExpectedException/로 클래스 이름을 얻을 수 있습니다.여기에는 다음과 같은 이점이 있습니다.

  • 이름은 이름 공간(있는 경우)과 함께 정규화됩니다.
  • 해결되는 것은string어떤 버전의 PHPUnit에서도 동작합니다.
  • IDE에 코드 완성이 표시됩니다.
  • 클래스 이름을 잘못 입력하면 PHP 컴파일러에서 오류가 발생합니다.

예:

namespace MyCoolPackage;  class AuthTest extends PHPUnit_Framework_TestCase {     public function testLoginFailsForWrongPassword()     {         $this->expectException(WrongPasswordException::class);         Auth::login('Bob', 'wrong');     } } 

PHP 컴파일

WrongPasswordException::class 

안으로

"MyCoolPackageWrongPasswordException" 

PHPUnit이 더 현명해지지 않게 말이죠.

주의: PHPUnit 5.2 도입 expectException을 대신해서setExpectedException.




다음 코드는 예외 메시지와 예외 코드를 테스트합니다.

중요:예상된 예외도 느려지지 않으면 실패합니다.

try{     $test->methodWhichWillThrowException();//if this method not throw exception it must be fail too.     $this->fail("Expected exception 1162011 not thrown"); }catch(MySpecificException $e){ //Not catching a generic Exception or the fail function is also catched     $this->assertEquals(1162011, $e->getCode());     $this->assertEquals("Exception Message", $e->getMessage()); }