[PHPUnit] PHP 단위 테스트 프레임워크 완벽 가이드
1. 개요
PHPUnit은 PHP 개발에서 가장 널리 사용되는 테스트 자동화 프레임워크로, 단위 테스트(Unit Testing)와 기능 테스트(Functional Testing)를 통해 코드의 안정성과 신뢰성을 높이는 데 큰 도움을 줍니다. 이 글에서는 PHPUnit의 기본 개념부터 설치, 사용법, 주요 기능을 상세히 살펴보겠습니다.
2. PHPUnit이란?
PHPUnit은 PHP 코드를 테스트하고 검증할 수 있는 테스트 프레임워크입니다. 이 프레임워크는 xUnit 계열의 프레임워크로, Java의 JUnit 등과 비슷한 방식으로 동작합니다.
PHPUnit의 주요 기능
- 단위 테스트: 코드의 작은 단위(클래스, 메서드 등)를 독립적으로 테스트.
- Assertions(단언문): 테스트 결과를 확인하는 다양한 검증 메서드 제공.
- Mocking(모의 객체): 외부 종속성을 제거하고 독립적으로 테스트.
- 코드 커버리지: 테스트가 전체 코드의 몇 퍼센트를 커버하는지 보고서 생성.
- 데이터 공급자(Data Provider): 동일한 테스트를 여러 데이터 세트로 반복 실행.
- 테스트 그룹화: 특정 테스트 그룹을 실행하거나 제외.
3. PHPUnit 설치하기
PHPUnit은 Composer를 통해 쉽게 설치할 수 있습니다.
3-1. Composer로 설치
composer require --dev phpunit/phpunit
3-2. 설치 확인
설치 후 PHPUnit의 버전을 확인합니다.
./vendor/bin/phpunit --version
4. PHPUnit 기본 사용법
4-1. 테스트 클래스 작성
PHPUnit을 사용하려면 PHPUnit\Framework\TestCase를 상속받아 테스트 클래스를 작성합니다.
<?php
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
public function testAddition()
{
$this->assertEquals(4, 2 + 2);
}
}
4-2. 테스트 실행
테스트를 실행하려면 터미널에서 아래 명령어를 입력합니다.
./vendor/bin/phpunit
실행 결과는 다음과 같이 표시됩니다:
OK (1 test, 1 assertion)
5. PHPUnit의 주요 단언문(Assertions)
테스트 결과를 검증하기 위해 다양한 단언문을 제공합니다.
메서드 | 설명 |
assertEquals($a, $b) | $a와 $b가 같은지 확인 |
assertTrue($condition) | 조건이 true인지 확인 |
assertFalse($condition) | 조건이 false인지 확인 |
assertNull($value) | 값이 null인지 확인 |
assertArrayHasKey($key, $array) | 배열에 특정 키가 있는지 확인 |
assertCount($count, $array) | 배열의 요소 개수가 맞는지 확인 |
6. Mock 객체(Mock Object) 사용
Mock 객체를 사용하면 외부 의존성을 제거하고 독립적으로 테스트할 수 있습니다. 이를 통해 데이터베이스, API 등 실제 환경에 의존하지 않고 테스트를 수행할 수 있습니다.
Mock 객체 예제
<?php
use PHPUnit\Framework\TestCase;
class UserServiceTest extends TestCase
{
public function testGetUserName()
{
$user = $this->createMock(User::class);
$user->method('getName')->willReturn('John Doe');
$this->assertEquals('John Doe', $user->getName());
}
}
7. 데이터 공급자(Data Provider)
데이터 공급자를 사용하면 동일한 테스트를 다양한 데이터 세트로 반복 실행할 수 있습니다.
데이터 공급자 예제
<?php
use PHPUnit\Framework\TestCase;
class MathTest extends TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAddition($a, $b, $expected)
{
$this->assertEquals($expected, $a + $b);
}
public function additionProvider()
{
return [
[1, 1, 2],
[2, 2, 4],
[3, 3, 6],
];
}
}
8. PHPUnit과 Laravel
Laravel은 PHPUnit을 기본적으로 지원하며, Laravel 프로젝트에서 테스트 파일은 tests 디렉토리에 작성합니다.
8-1. 테스트 생성
php artisan make:test ExampleTest
8-2. HTTP 테스트 예제
<?php
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function testHomePage()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
8-3. 테스트 실행
php artisan test
9. PHPUnit을 사용하는 이유
- 코드 안정성 보장: 리팩토링이나 기능 추가 시 기존 코드의 안정성을 유지.
- 버그 예방: 코드 작성 시 버그를 사전에 발견.
- 효율성: 반복적인 수작업 테스트를 자동화.
- 협업 강화: 다른 개발자가 코드 변경 시 테스트로 기존 기능이 깨지는지 확인.
10. 결론
PHPUnit은 PHP 개발에 있어 필수적인 도구로, 코드 품질을 높이고 안정성을 유지하는 데 중요한 역할을 합니다. 특히, 신입 개발자부터 숙련된 개발자까지 모두에게 효율적인 테스트 환경을 제공합니다.
지금 바로 PHPUnit을 설치하고, 테스트 코드를 작성하며 더 안정적이고 신뢰할 수 있는 코드를 만들어 보세요!