li₃ 테스트 프레임워크 사용 가이드: 코드 품질 보장의 완전한 프로세스

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 플랫폼에서 사용할 수 있습니다.

최적 실천 방법

  1. 테스트 디렉토리 구조: tests/cases/ 디렉토리에 모듈별로 테스트 케이스를 배치
  2. 명명 규칙: *Test.php 형식으로 클래스명을 지정하고, test*로 시작하는 메서드명 사용
  3. 단일 책임 원칙: 각 테스트 메서드는 하나의 기능만 검증
  4. 외부 의존성 모킹: test/Mocker.php를 활용해 시스템 분리
  5. 정기적 전체 테스트: 코드 제출 전 모든 테스트 통과 확인
  6. 커버리지 관리: 핵심 로직은 100% 커버리지 달성 목표

이러한 방법을 따르면 li₃ 테스트 프레임워크의 강력한 기능을 최대한 활용할 수 있으며, 작은 프로젝트부터 대규모 기업 애플리케이션까지 코드 품질을 보장할 수 있습니다. li₃ 테스트 프레임워크를 활용해 PHP 프로젝트에 견고한 품질 보장을 구축해보세요.

태그: li3 framework php testing unit testing code coverage testing framework

7월 21일 03:23에 게시됨