1. PHP Unit

PHP Unit은 PHP 코드 테스트 도구이며, 사실상 표준으로 자리잡게 되었습니다.

PHP Unit을 설치하는 방법으로는 아카이브( phar 파일 )을 다운로드하여 직접 실행하는 방법이 있고,

PHP 패키지 및 의존성 관리 도구인 컴포저( Composer )를 사용하는 방법이 있습니다.


이 글에서는 윈도우 환경에서 첫 번째 방법에 대한 방법을 소개하고자 합니다.

PHP Unit의 공식 문서는 여기를 참고해주세요.

( Composer로 PHP Unit을 사용하는 방법에 대해서도 소개하고 있습니다. )




 

2. PHP Unit 설치

먼저 링크에서 PHP Unit 패키지를 설치하도록 합니다.

설치된 phar 파일을 단위 테스트를 진행할 폴더 안으로 이동시킵니다.

 



다음으로는 터미널에서 PHP Unit을 실행할 수 있도록 시스템 환경 변수를 설정해야 합니다.

PATH에 php.exe 파일이 있는 디렉터리 경로를 추가하면 됩니다.


이제 터미널에서 PHP Unit을 실행할 준비가 끝났으므로, 테스트를 해보도록 하겠습니다.

cmd 창을 열고, phar 파일이 있는 경로로 이동하여 아래의 명령어를 실행합니다.

# php ./phpunit-7.3.5.phar --version

 

PHP 명령어를 실행할 수 없다고 에러가 발생하면, 환경 변수가 등록되지 않은 것입니다.





3. 테스트 코드 작성

다음으로 테스트코드를 간단하게 작성해봄으로써 단위 테스트를 진행해보겠습니다.


먼저 calc.php라는 이름으로 파일을 생성하여 함수를 작성합니다.

이 함수는 인자로 받은 값들의 평균을 계산하는 함수입니다.

<?php
function avg()
{
$args = func_get_args();
$sum = 0;
foreach ($args as $val) {
$sum += $val;
}
$avg = $sum / count($args);
return $avg;
}

그리고 이 함수가 제대로 실행되는지 확인하기 위해 CalcTest.php 파일을 생성합니다.

이 파일은 클래스로 작성이 되며, PHP Unit을 실행하기 위해 몇가지 규칙이 존재합니다.

<?php
include 'calc.php';
use PHPUnit\Framework\TestCase;



class CalcTest extends TestCase
{
public function testAvg()
{
$result = avg(10, 20, 30);
$this->assertEquals(20, $result);
}

}

  • TestCase 클래스 상속
    • 테스트 코드를 작성하는 파일은 클래스로 작성이 되어야 하며, PHPUnit\Framework\TestCase 클래스를 상속받아야 합니다.
  • 메서드명 규칙
    • 테스트를 수행하는 함수 명은 "test"로 시작해야 합니다.

이와 같은 규칙만 지키면 단위 테스트를 진행할 수 있습니다.

 

 assertEquals() 메서드는 TestCase 클래스에 정의되어 있는 것이며

  • 첫 번째 인자에는 예상하는 기대값을 전달하고,
  • 두 번째 인자에는 테스트 할 함수의 결과 값을 전달하면 됩니다.


테스트 코드까지 작성을 했으니, 이제 cmd 창에서 단위 테스트를 실행해보겠습니다.

 

 

100%가 표시된 줄의 점( . )은 각각의 테스트를 의미하고,

마지막에 표시된 OK는 모든 테스트가 성공했음을 뜻합니다.

 

테스트 코드로 작성된 10, 20, 30의 평균은 20이므로 기대 값과 일치하기 때문에 당연한 결과입니다.

그러면 기대 값이 20이 아닌 100으로 설정했으면 결과는 어떻게 될까요?

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

 

이번에는 결과가 "FAILURES !" 입니다.

실제 결과 값과 예상한 값이 다르기 때문에 테스트에 실패했다고 한 것입니다.




이와 같이 테스트 코드를 작성해서 단위 테스트를 진행할 수 있습니다.

 

위에서 테스트 코드로 결과 값과 기대 값이 일치하는지 확인하는 assertEquals() 메서드를 살펴보았습니다.

PHP Unit에는 이 밖에도 배열에 특정 원소가 배열에 존재하는지, 배열이 비어 있는지, 객체가 어떤 클래스의 인스턴스인지 등에 대한 메서드가 정의되어 있습니다.

PHP Unit의 다른 메서드는 여기를 참고해주세요!




이상으로 PHP Unit을 설치하고 테스트 코드를 작성하여 단위 테스트를 하는 방법에 대해 알아보았습니다.