라라벨에서 테스트를 작성하고 실행하는 방법은?
_____---
1. 라라벨 테스트의 기본 개념은 무엇인가요?
라라벨 테스트는 애플리케이션의 기능이 올바르게 작동하는지 자동으로 확인하는 코드입니다. 주로 유닛 테스트(작은 단위 테스트)와 통합 테스트(여러 구성 요소의 협업 테스트)를 작성합니다.
---
2. 테스트를 작성하려면 어디서 시작해야 하나요?
`tests/Feature`와 `tests/Unit` 디렉토리가 기본 위치입니다.
- `Feature` 테스트: 라우팅, 미들웨어, 컨트롤러 같은 통합 테스트 작성
- `Unit` 테스트: 개별 클래스, 메서드 단위의 유닛 테스트 작성
---
3. 새로운 테스트 클래스는 어떻게 생성하나요?
아래 artisan 명령어를 사용합니다.
- 유닛 테스트 생성:
```bash
php artisan make:test ExampleTest --unit
```
- 기능 테스트 생성:
```bash
php artisan make:test ExampleTest
```
---
4. 테스트 메서드 작성 규칙은 무엇인가요?
PHPUnit 기준으로 메서드 이름은 `test`로 시작하거나, 메서드 앞에 `@test` 어노테이션을 붙이면 자동으로 테스트로 인식됩니다.
예:
```php
public function test_example() { ... }
// 또는
/ @test */
public function example() { ... }
```
---
5. 테스트 실행은 어떻게 하나요?
프로젝트 루트에서 아래 명령어를 실행합니다.
- 모든 테스트 실행:
```bash
php artisan test
```
- 특정 테스트 파일만 실행:
```bash
php artisan test --filter ExampleTest
```
- 더 자세한 PHPUnit 옵션도 사용 가능:
```bash
./vendor/bin/phpunit --filter test_method_name
```
---
6. 데이터베이스를 사용하는 테스트는 어떻게 작성하나요?
라라벨에서 `RefreshDatabase` 트레이트를 테스트 클래스에 추가하면, 각 테스트가 실행될 때마다 데이터베이스가 마이그레이션부터 초기화됩니다.
```php
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
...
```
---
7. 테스트에서 HTTP 요청을 보내는 방법은?
`$this->get()`, `$this->post()`, `$this->put()`, `$this->delete()` 메서드를 사용합니다.
예:
```php
$response = $this->post('/login', [
'email' => '[email protected]',
'password' => 'secret',
]);
$response->assertStatus(302);
```
---
8. 테스트 결과를 어떻게 검증하나요?
라라벨의 `TestResponse` 객체를 활용해 여러 검증 메서드를 사용할 수 있습니다. 예:
- `assertStatus($code)` - HTTP 상태 코드 검증
- `assertSee($text)` - 응답 본문에 특정 텍스트 포함 여부
- `assertJson($array)` - JSON 응답 검증
- `assertDatabaseHas($table, $data)` - 데이터베이스에 특정 데이터 존재 확인
---
9. 팩토리를 활용한 테스트 데이터 생성은?
라라벨은 모델 팩토리를 지원하며, 테스트에서 손쉽게 더미 데이터를 생성할 수 있습니다.
예:
```php
$user = User::factory()->create();
```
---
10. 테스트 환경 설정은 어떻게 하나요?
라라벨은 `.env.testing` 파일을 인식하며, 테스트 실행 시 자동으로 이 환경 설정을 사용합니다. 테스트 전용 DB나 설정을 여기에 작성하세요.
---
11. PHP 버전과 PHPUnit 버전이 맞지 않을 때 어떻게 해결하나요?
라라벨 버전별 권장하는 PHPUnit 버전을 공식 문서에서 확인 후 `composer.json`의 `require-dev` 섹션을 수정한 뒤 `composer update`를 실행하세요.
---
12. 비동기 작업(이벤트, 큐) 테스트는 어떻게 하나요?
라라벨에서 제공하는 `Event::fake()`, `Queue::fake()` 메서드를 활용해 이벤트 및 큐 작업이 실행되는지 검증할 수 있습니다.
예:
```php
Event::fake();
$this->post('/action');
Event::assertDispatched(MyEvent::class);
```
---
13. 자주 발생하는 테스트 문제 해결법은?
- `Refreshing database` 문제 → `RefreshDatabase` 트레이트 누락 확인
- 마이그레이션 오류 → `.env.testing` DB 연결 확인
- 페이징, 타임존 이슈 → 테스트 환경 설정 체크
- 인증 관련 오류 → `actingAs()` 메서드 사용 권장
---
라라벨의 테스트 작성과 실행은 위 절차와 방법들을 따라 하면 쉽게 구성 및 자동화할 수 있습니다. 자세한 내용은 공식 문서 [Testing](https://laravel.com/docs/testing) 참고를 권장합니다.
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 08:17:07
조회수: 117 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 117 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.