minstudio

Slim 애플리케이션 유닛 테스트 (PHPUnit)

코드를 수정할 때마다 포스트맨(Postman)으로 일일이 API를 테스트하는 것은 너무 힘들고 실수가 생깁니다. PHPUnit을 사용하여 "A를 보내면 B가 나와야 해"라는 테스트 스크립트를 짜두면, 로봇이 1초 만에 전체 앱의 버그를 검사해줍니다!

🤖
PHPUnit (테스트 봇)
✔️ testLoginSuccess()
✔️ testLoginFailWrongPassword()
testUserProfile() (Expected 200, Got 404)

자동화된 테스트 코드는 리팩토링(코드 개선)을 할 때 든든한 보험 역할을 합니다.

bash
// composer require --dev phpunit/phpunit

use PHPUnit\Framework\TestCase;
use Slim\Psr7\Factory\ServerRequestFactory;

class AppTest extends TestCase {
    
    protected $app;

    // 매 테스트가 실행되기 전에 앱을 세팅합니다.
    protected function setUp(): void {
        $this->app = require __DIR__ . '/../src/app.php'; // Slim 앱 불러오기
    }

    public function testGetHelloRoute() {
        // 1. 가짜(Mock) GET 요청 생성
        $request = (new ServerRequestFactory())->createServerRequest('GET', '/hello/Minsu');
        
        // 2. Slim 앱에 가짜 요청을 밀어넣고 응답(Response)을 받아냄
        $response = $this->app->handle($request);
        
        // 3. 단언(Assert): 결과가 내가 예상한 것과 일치하는지 확인!
        $this->assertEquals(200, $response->getStatusCode()); // 상태 코드가 200인가?
        $this->assertStringContainsString('Minsu', (string)$response->getBody()); // 본문에 'Minsu'가 포함되어 있는가?
    }
}

// 터미널 실행: ./vendor/bin/phpunit tests/
Slim 애플리케이션 유닛 테스트 (PHPUnit) | Minstudio