0과 1을 공부하다.

[PHP] PHPUnit Test 환경구성 및 테스트 본문

Study/Web

[PHP] PHPUnit Test 환경구성 및 테스트

Developer_Jay 2022. 4. 14. 23:57
728x90

 

본 글에서는 PHP로 작성된 코드의 Unit Test 환경구성 및 테스트에 대해 다룬다.

테스트 환경은 Linux Rocky 8 버전에서 php 7.3버전에서 수행한다. 

 

환경구성

 

(1) php install

 

php 7.3 version을 설치한다. 설치 방법은 아래 참고사이트 [1]번 링크를 참조한다. 


(2) composer install

php 패키지 관리자 'composer'를 설치한다. 

$ curl -sS https://getcomposer.org/installer | php


 
(3) phpunit install

php 7.3 버전에 호환되는 phpunit phpunit 9.3 버전을 설치한다. 

$ php composer.phar require --dev phpunit/phpunit ^9.3


(3) phpunit.xml 구성

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
  processIsolatio = "true"
  colors = "true"
  backupGlobals = "true"
  stderr = "true"
>
  <coverage
    includeUncoveredFiles="false">
  </coverage>
  <php>
    <includePath>web-admin/lib</includePath> <!-- PATH -->
  </php>
</phpunit>

 

php 또는 unit에 필요한 옵션정보를 xml로 구성하여 사용하거나 매 실행마다 명령어로 입력한다.

자세한 구성 정보는 아래 공식 문서 또는 블로그 내용을 참고한다. 


공식문서:
 The XML Configuration File — PHPUnit 9.5 Manual

https://phpunit.readthedocs.io/en/9.5/configuration.html?highlight=xml

 블로그: PHPUnit - XML 구성 파일 - https://runebook.dev/ko/docs/phpunit/configuration


 

 

TestCode 작성


(1) Code Example

아래는 예시 코드이다. 첫 번째 코드는 입력 받은 매개변수의 평균값을 구하고 변환하는 함수이며, 두 번째 코드는 첫 번째 코드의 기댓값을 대입하여 테스트하는 테스트 코드이다. 

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

 

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

class CalcTest extends TestCase
{
    public static function setUpBeforeClass(): void
    {   
        fwrite(STDOUT, "\nStart clac Test\n");  
    }

    public static function tearDownAfterClass(): void
    {
        fwrite(STDOUT, "\nEnd clac Test\n"); 
    }
    
    protected function setUp(): void {}
    
    public function testAvg()
    {
        $result = avg(10, 20, 30);
        $empty=null;
        
        $this->assertEquals(20, $result);
        $this->assertNotEquals(25, $result);

        $this->assertSame(10,10);
        $this->assertNotSame(10,15);

        $this->assertTrue(true);
        $this->assertFalse(false);

        $this->assertEmpty($empty);
        $this->assertNotEmpty($result);

        //$this->assertInstanceOf(CalTest::class, new CalTest);
        //$this->assertNotInstanceOf(CalTest::class, new CalTest);
    }
}
?>

 

 

(2) Class 구조

  • 테스트 모듈은 클래스로 작성해야 하며,  작성한 클래스는 TestCase를 상속받아야 한다.
  • 1개 이상의 단위 테스트 함수가 존재해야 하며, 함수명은 test로 시작해야 한다.
  • 파일 상단에 아래와 같이 TestCase use하여 추가한다.
use PHPUnit\Framework\TestCase;



  가. setUpBeforeClass()
    테스트 모듈 시작 최초에 1회만 실행된다. 

public static function setUpBeforeClass(): void{}


  나. tearDownAfterClass()
    테스트 모듈 종료 1회만 실행된다. 

public static function tearDownAfterClass(): void{}


  다. setUp()
    각 테스트(함수) 실행시 실행된다. 

protected function setUp(): void {}


※ PHP 생성자(__construt())는 사용할 수 없다. 

 

(3) 테스트 함수 목록

  가. 데이터에 의한 비교 테스트

  • 첫 번째 인수(기댓값)와 두 번째 인수(비교값)을 비교하는 테스트 함수이다.
  • assertNotEquals는 assertEquals의 역이며, 인수는 같다.
assertEquals(20, $result);
assertNotEquals(25, $result);


  나. 데이터 타입과 데이터에 의한 비교. 테스트  (가 .와 큰 차이는 모르겠다.)

  • assertNotSame은 assertSame의 역이며, 인수는 같다.
assertSame(10,10);
assertNotSame(10,15);


다. bool Type에 따른 테스트

  • bool Type에 따른 테스트 함수이다.
assertTrue(true);
assertFalse(false);


라. Empty에 따른 테스트

  • 변수의 공백에 따른 테스트 함수이다.
assertEmpty($empty); 
assertNotEmpty($result);



마. 객체 인스턴스 비교 테스트

  • 두 번째 인수(테스트 객체)가 첫 번째(비교 클래스) 인수에 포함되는 객체인지 테스트하는 함수이다.
  • assertNotInstanceOf는 assertInstanceOf의 역이며, 인수는 같다.
assertInstanceOf(CalTest::class, new CalTest);
assertNotInstanceOf(CalTest::class, new CalTest);


각 테스트 함수에 마지막 매개변수로 오류메세지를 추가하여 오류 메세지를 출력할 수 있다.

assertEquals(20, $result, "Not Equals !!!!!!");


이외 자세한 내용은 아래  참고사이트의 [2] 공식문서를 참고한다. 


 

 

 TestCode 실행

 

$ php vendor/bin/phpunit testdir/unit

 

※ xml 파일에 옵션 값을 구성하였다면 명령줄에 옵션을 포함하지 않는다.

 

 

 

참고사이트

 

[1] RHEL/CentOS 8 에 PHP 7.3 설치하기 블로그 -  https://www.lesstif.com/php-and-laravel/rhel-centos-8-php-7-3-89555635.html

 

[2] phpunit 9.5 공식 메뉴얼 -  https://phpunit.readthedocs.io/en/9.5/installation.html

 

 

 

 

※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.

 

 

* CopyRight 2022. Jay Park All rights reserved.

728x90
Comments