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

2022. 4. 14. 23:57·Front-End/Web
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
저작자표시 비영리 변경금지 (새창열림)

'Front-End > Web' 카테고리의 다른 글

[Web] JWT Web Token 기초  (0) 2023.08.10
[Apache] 특정 디렉터리 Http Authentication 적용  (0) 2022.07.24
'Front-End/Web' 카테고리의 다른 글
  • [Web] JWT Web Token 기초
  • [Apache] 특정 디렉터리 Http Authentication 적용
dev.parkjh
dev.parkjh
Jay Blog. Github: https://github.com/GreatPark96
  • dev.parkjh
    0과 1을 공부하다.
    dev.parkjh
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Profile (2)
      • Paper (6)
      • Column (3)
      • Project (8)
        • Smart Home (3)
        • 3D Printing (5)
      • Front-End (0)
        • Web (3)
      • Back-End (8)
        • API (1)
        • DB (1)
        • Laravel (4)
      • Language (16)
        • Kotlin (11)
        • C, C++ (3)
        • JAVA (0)
        • python (2)
      • System (28)
        • Server (15)
        • Security (1)
        • Network (1)
        • Linux (8)
        • Cloud (3)
      • ETC (34)
        • Book Recommend (Computer) (3)
        • IoT (7)
        • BlockChain (7)
        • ETC (17)
      • My YOLO (1)
      • Note (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    docker private register
    github
    data serialization formats
    코틀린개발환경
    NAS HDD교체
    Kotlin
    git
    3d프린터 초보
    데이터 직렬화 포맷
    3D
    Jenkins
    nas
    docker
    C언어
    docker container
    work hour
    ci/cd
    linux job
    3D프린터 입문
    gitlab
    ncp container registry
    Notification
    Database
    리눅스 파일동기화
    3D프린터
    ai code review
    네이버클라우드
    coderabbit
    3D모델링
    kubernetes
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.parkjh
[PHP] PHPUnit Test 환경구성 및 테스트
상단으로

티스토리툴바