li₃ 테스트 프레임워크 사용 가이드: 코드 품질 보장의 완전한 프로세스
li₃(리튬)는 PHP 개발자를 위한 빠르고 유연한 RAD(빠른 애플리케이션 개발) 프레임워크로, 내장된 테스트 시스템을 통해 신뢰성 있는 PHP 애플리케이션 구축을 지원합니다. 본 문서에서는 li₃ 테스트 프레임워크를 활용한 코드 품질 관리 프로세스 구축 방법을 단계별로 안내합니다.
테스트 모듈 구성 요소
li₃ 테스트 시스템은 다양한 핵심 파일과 디렉토리로 구성되어 있으며, 다음과 같은 주요 요소를 포함합니다:
- 기본 테스트 클래스:
test/Unit.php에서 단위 테스트 기능을 제공하며 모든 테스트 클래스가 이 것을 상속합니다 - 테스트 실행 관리자:
test/Dispatcher.php가 테스트 케이스를 로드하고 실행합니다 - 검증 함수 집합:
assertEqual(),assertException()등 다양한 검증 메서드가 포함되어 있습니다 - 필터 시스템:
test/filter/디렉토리에 코드 커버리지 분석 및 성능 측정 기능이 구현되어 있습니다
이러한 구성 요소들이 협력하여 단위 테스트부터 통합 테스트까지 전 과정을 지원합니다.
초기 설정 및 테스트 실행
1. 시스템 준비
PHP 환경(권장 버전: 7.2 이상)이 설치되어 있는지 확인한 후 다음 명령어로 프로젝트 코드를 가져옵니다:
git clone https://gitcode.com/gh_mirrors/lit/lithium
cd lithium
2. 내장 테스트 실행
프레임워크 자체에 포함된 테스트 케이스를 콘솔 명령어로 실행할 수 있습니다:
./console/li3 test
이 명령어는 모든 테스트 케이스를 자동으로 실행하고, 테스트 결과 및 커버리지 리포트를 출력합니다.
첫 번째 단위 테스트 작성
테스트 클래스 구조
li₃ 테스트는 tests/cases/ 디렉토리에 위치하며, 컨트롤러 테스트 예시는 다음과 같습니다:
namespace lithium\tests\cases\action;
use lithium\action\Request;
use lithium\tests\mocks\action\MockPostsController;
class ControllerTest extends \lithium\test\Unit {
// 테스트 메서드...
}
기본 테스트 메서드 예제
다음은 컨트롤러가 요청을 올바르게 처리하는지를 검증하는 테스트 예시입니다:
public function testResponseGeneration() {
$mockController = new MockPostsController();
$response = $mockController->__invoke(null, ['action' => 'index', 'args' => []]);
$this->assertInstanceOf('lithium\action\Response', $response);
$this->assertEqual('게시물 목록', $response->body());
$this->assertEqual(['Content-Type' => 'text/plain; charset=UTF-8'], $response->headers);
}
이 테스트는 응답 객체 생성, 콘텐츠 설정, HTTP 헤더 검증을 수행합니다.
고급 테스트 기법
모킹 객체 활용
test/Mocker.php에 구현된 모킹 기능을 사용해 외부 의존성을 분리할 수 있습니다:
use lithium\tests\mocks\action\MockRequest;
public function testCustomRequestHandling() {
$request = new MockRequest();
$controller = new MockPostsController(compact('request'));
$result = get_class($controller->request);
$this->assertEqual($result, 'lithium\tests\mocks\action\MockRequest');
}
예외 처리 검증
assertException 메서드를 사용해 예외 처리 로직을 테스트할 수 있습니다:
public function testPrivateMethodAccess() {
$controller = new MockPostsController();
$this->assertException('/^비공개 메서드 호출 시도/', function() use ($controller) {
$controller->__invoke(null, ['action' => 'redirect']);
});
}
응답 상태 코드 검증
컨트롤러가 올바르게 HTTP 상태 코드를 설정하는지를 확인하는 예제입니다:
public function testHttpStatusCode() {
$controller = new MockPostsController(['classes' => [
'response' => 'lithium\tests\mocks\action\MockResponse'
]]);
$controller(null, ['action' => 'notFound']);
$expected = ['code' => 404, 'message' => 'Not Found'];
$result = $controller->response->status;
$this->assertEqual($expected, $result);
}
커버리지 분석 및 리포트 생성
코드 커버리지 분석 기능은 test/filter/Coverage.php에 구현되어 있습니다. 리포트를 생성하려면 다음 명령어를 실행합니다:
./console/li3 test --filter=Coverage
이 명령어는 각 파일의 커버리지 비율을 표시하여 미검증 영역을 식별하는 데 도움을 줍니다.
자동화 테스트 및 CI 연동
프레임워크는 지속적 통합(CI) 시스템과 쉽게 연동 가능합니다. tests/ci/ 디렉토리에는 다음 구성 파일이 포함되어 있습니다:
tests/ci/install.sh: 환경 설치 스크립트tests/ci/test.sh: 테스트 실행 스크립트tests/ci/composer.json: 의존성 관리 설정
이 스크립트는 GitHub Actions, GitLab CI, Jenkins 등 다양한 CI 플랫폼에서 사용할 수 있습니다.
최적 실천 방법
- 테스트 디렉토리 구조:
tests/cases/디렉토리에 모듈별로 테스트 케이스를 배치 - 명명 규칙:
*Test.php형식으로 클래스명을 지정하고,test*로 시작하는 메서드명 사용 - 단일 책임 원칙: 각 테스트 메서드는 하나의 기능만 검증
- 외부 의존성 모킹:
test/Mocker.php를 활용해 시스템 분리 - 정기적 전체 테스트: 코드 제출 전 모든 테스트 통과 확인
- 커버리지 관리: 핵심 로직은 100% 커버리지 달성 목표
이러한 방법을 따르면 li₃ 테스트 프레임워크의 강력한 기능을 최대한 활용할 수 있으며, 작은 프로젝트부터 대규모 기업 애플리케이션까지 코드 품질을 보장할 수 있습니다. li₃ 테스트 프레임워크를 활용해 PHP 프로젝트에 견고한 품질 보장을 구축해보세요.