고양이 여름이의 지식채널
Laravel 테스트 코드 작성하기. (유닛테스트, 기능테스트) 본문
Laravel은 PHPUnit을 기반으로 한 강력한 테스트 프레임워크를 제공하여 애플리케이션의 코드 품질을 향상시키고 회귀를 방지할 수 있습니다. Laravel의 테스트 도구를 사용하면 유닛 테스트와 기능 테스트를 작성할 수 있으며, 테스트 커버리지를 쉽게 측정할 수 있습니다.
유닛 테스트
유닛 테스트는 애플리케이션의 작은 부분을 테스트하는 것입니다. 이를 통해 코드의 특정 부분이 제대로 작동하는지 확인할 수 있습니다. Laravel에서 유닛 테스트를 작성하려면 Tests\Unit 디렉토리에 테스트 파일을 만들어야 합니다.
예를 들어, app/Calculator.php 파일에 있는 Calculator 클래스를 테스트하려면 다음과 같은 테스트 파일을 작성할 수 있습니다.
artisan 명령어를 이용해서 test 파일을 생성할 수 있습니다.
php artisan make:test CalculatorTest --unit
테스트 코드 작성
namespace Tests\Unit;
use App\Calculator;
use Tests\TestCase;
class CalculatorTest extends TestCase
{
public function testAddition()
{
$calculator = new Calculator;
$result = $calculator->add(2, 3); // calculator의 add function으로 접근
$this->assertEquals(5, $result); // 결과가 5와 같은지 비교
}
}
작성된 파일을 대상으로 artisan test를 실행해주면 테스트가 가능합니다.
php artisan test tests/Unit/CalculatorTest.php
테스트 결과.
기능 테스트
기능 테스트는 애플리케이션의 실제 동작을 테스트합니다. 이를 통해 애플리케이션의 다양한 기능이 예상대로 작동하는지 확인할 수 있습니다. Laravel에서 기능 테스트를 작성하려면 Tests\Feature 디렉토리에 테스트 파일을 만들어야 합니다.
예를 들어, app/Http/Controllers/UserController.php 파일에 있는 UserController 클래스의 index 메서드를 테스트하려면 다음과 같은 테스트 파일을 작성할 수 있습니다.
artisan 명령어를 이용해서 test 파일 생성
php artisan make:test UserControllerTest
테스트 코드 작성
namespace Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserControllerTest extends TestCase
{
use RefreshDatabase;
public function testIndex()
{
$response = $this->get('/users'); // /users 경로로 GET 요청을 보냄
$response->assertStatus(200); // 응답 상태 코드가 200(OK)인지 확인
$response->assertSee('User list'); // 응답 본문에 'User list' 문자열이 포함되어 있는지 확인
}
}
test를 실행
php artisan test tests/feature/UserControllerTest.php
테스트 결과.
API 테스트
Laravel에서 API 테스트를 작성할 때는 json 메서드를 사용하여 JSON 응답을 처리할 수 있습니다.
테스트 코드 작성
namespace Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserControllerTest extends TestCase
{
use RefreshDatabase;
public function testIndex()
{
$user = User::factory()->create(); //$user 데이터 생성
$response = $this->actingAs($user) //actingAs function을 사용하여 사용자 인증을 처리
->getJson('/api/users'); //getJson function을 사용하여 JSON 응답받음
$response->assertStatus(200)
->assertJson(['data' => true]); //assertJson function으로 추가 검증
}
}
artisan 명령어 정리
// test 생성
php artisan make:test CalculatorTest --unit //유닛테스트
php artisan make:test CalculatorTest //기능테스트
// test 실행
php artisan test tests/Unit/CalculatorTest.php //유닛테스트
php artisan test tests/feature/UserControllerTest.php //기능테스트
php artisan test --filter testIndex tests/Feature/UserControllerTest.php //testIndex function만 실행
php artisan test --filter UserControllerTest > result.txt // 결과를 txt 파일로 저장
Laravel 에러 핸들링, exception custom(예외처리) 설정 방법