단위 테스트 작성시 특정 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);
}
PHP
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',
];
PHP
Ref