PHPUnit 에서 예외 테스트(Exception Test) 하기
단위 테스트 작성시 특정 Exception 이 발생해야 하는 경우가 있습니다.
예로 입력값이 유효한 전화 번호인지 검증하는 validator 를 만들었다면 유효하지 않은 입력값일 경우 테스트 코드는 \Illuminate\Validation\ValidationException 예외가 발생하지 않으면 단위테스트가 실패한 것으로 처리해야 합니다.
이런 예외를 테스트하기 위해 PHPUnit 은 2가지 방법을 제공합니다.
@expectedException 사용
예전 버전의 PHPUnit 은 이를 위해 다음과 같이 @expectedException 을 테스트 함수의 PHPDoc 에 기술해 주면 됐지만 deprecated 됐고 PHPUnit 9 에서는 제거될 예정입니다.
<?php class ValidationTest extends TestCase { /** * @test * @expectedException \Illuminate\Validation\ValidationException */ public function thrown_validation_exception_when_input_invalid_phone_number() { $invalid_phone_number = [ 'invalid_phone_number' => '987654321', ]; $validator = Validator::make($invalid_phone_number, [ 'invalid_phone_number' => [ 'required', 'max:15', new CellPhoneRule(), ], ]); $validator->validate(); $this->assertTrue(true); }
expectException method 사용
최신 버전의 PHPUnit 은 expectException(string $exception) 메서드 사용을 권장하고 있습니다. 테스트 코드 시작점에 호출해 주고 테스트 코드를 아래에 기술해 주면 됩니다.
<?php class ValidationTest extends TestCase { /** * @test */ public function thrown_validation_exception_when_input_invalid_phone_number() { // 발생할 Exception 설정 $this->expectException(\Illuminate\Validation\ValidationException::class); $invalid_phone_number = [ 'invalid_phone_number' => '987654321', ];