일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- github
- 네이버클라우드
- git
- Notification
- OnlineIDE
- gitlab
- 3D프린터 입문
- 3D프린터
- IoTNetwork
- NAS HDD교체
- 3D 프린터 용어
- octoprint
- 코틀린개발환경
- docker
- 리눅스 파일동기화
- Kotlin
- C언어
- kubernetes
- Token인증방식
- nas
- 3D프린터입문
- ci/cd
- 3d프린터 초보
- 3D
- data serialization formats
- 3D모델링
- docker container
- linux job
- Jenkins
- 데이터 직렬화 포맷
- Today
- Total
0과 1을 공부하다.
[PHP] PHPUnit Test 환경구성 및 테스트 본문
본 글에서는 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.
'Study > Web' 카테고리의 다른 글
[Laravel] Laravel 프로젝트에 Swagger 적용 (0) | 2023.02.13 |
---|---|
[Laravel] Laravel 형상관리 (0) | 2022.10.27 |
[Laravel] Eloquent Model 작성 (0) | 2022.10.13 |
[Laravel] Laravel 설치 및 개요 (0) | 2022.10.13 |
[Apache] 특정 디렉터리 Http Authentication 적용 (0) | 2022.07.24 |