고양이 여름이의 지식채널

Laravel 테스트 코드 작성하기. (유닛테스트, 기능테스트) 본문

Programming/Laravel

Laravel 테스트 코드 작성하기. (유닛테스트, 기능테스트)

썸머캣 2023. 3. 16. 23:32

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(예외처리) 설정 방법

 

Laravel 에러 핸들링, exception custom(예외처리) 설정 방법

Laravel은 응용프로그램 실행 중에 발생할 수 있는 다양한 유형의 오류 및 예외를 탐지하고 처리할 수 있는 강력한 error handling을 제공합니다. 다음은 Laravel의 error handling을 사용하고 필요에 맞게

summer-cat93.tistory.com

 

 

728x90
반응형
Comments