7.07. 유닛 테스트

기능을 단위(unit) 별로 코드를 이용해서 테스트하는 유닛테스트에 대해 알아본다.


유닛테스트에는 phpunit 이 필요하므로 https://phar.phpunit.de/phpunit.phar 파일을 다운로드해서 테스트할 디렉토리에 복사한다.


테스트 대상 코드를 작성한다.

<?php
function sample_func(){
    return 2;
}

위 코드를 sample_code.php 로 저장한다.


테스트를 진행할 파일을 작성한다.

<?php
include 'sample_code.php';

use PHPUnit\Framework\TestCase;

class SampleTest extends TestCase
{
    public function test_sample_func()
    {
        $result = sample_func();
        $this->assertEquals(2, $result);
    }
}

위 파일을 SampleTest.php 로 저장한다. 대소문자에 유의해야 한다.


실제 테스트를 실행한다. 쉘 cmd 에서 실행시킨다.

php phpunit-9.2.6.phar SampleTest.php

테스트 결과 OK 가 나오면 테스트가 성공한 것이다.


유닛 테스트는 개별적인 기능을 프로그래밍적으로 정의해두고 자동으로 확인하는 개발 방법 중 하나이다. 유닛 테스트를 이용해서 우선 필요한 기능을 테스트할 파일을 만들고, 유닛 테스트를 실패하고, 기능을 작성하고, 유닛 테스트를 성공하고 하는 일련의 개발 프로세스를 TDD(Test Driven Development) 라고 부른다.
유닛테스트를 하게 되면 직접 UI 테스트를 하지 않아도 개별 함수나 클래스별로 기능을 테스트할 수 있게 된다. 기존의 코드가 변경되어도 기존에 영향이 있을지 여부를 자동화된 유닛 테스트로 검증도 가능하다.


유닛 테스트를 위해서 phpunit 이라는 라이브러리를 사용했다.

use PHPUnit\Framework\TestCase;

테스트 파일은 TestCase 클래스를 상속한 클래스로 작성된다. 파일명은 클래스명과 동일해야 한다.

class SampleTest extends TestCase

테스트 메소드는 반드시 test 로 시작해야 한다.

public function test_sample_func()

assertEquals 메소드는 일치하는지 단언(Assert) 하는 메소드이다. phpunit 은 assert 메소드들을 통해 테스트 통과 여부를 검증한다.

$this->assertEquals(2, $result);

더 많은 phpunit 검증 정보는 https://phpunit.readthedocs.io/en/9.2/assertions.html 를 참고하면 된다.