216.73.216.141 TODAY : 66,565

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ตœ์ƒ๊ธ‰

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 6์ฃผ์ฐจ: ํ…Œ์ŠคํŠธ ์ž๋™ํ™” (๋‹จ์œ„/ํ†ตํ•ฉ/E2E ํ…Œ์ŠคํŠธ)- 01 PHPUnit์„ ์ด์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 6์ฃผ์ฐจ: ํ…Œ์ŠคํŠธ ์ž๋™ํ™” (๋‹จ์œ„/ํ†ตํ•ฉ/E2E ํ…Œ์ŠคํŠธ)- 01 PHPUnit์„ ์ด์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ ์ŠคํŽ™

  • ํ‰์ : 10.0
  • ๋ผ์ด์„ ์Šค: free
  • ์šด์˜์ฒด์ œ:
  • ํŒŒ์ผ ํฌ๊ธฐ: 0

ํ”ผ๋“œ๋ฐฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

  • ์‚ฌ์šฉ์ž ํ‰์ : 10.0
  • ๋‹ค์šด๋กœ๋“œ ์ˆ˜: 0
  • ์กฐํšŒ์ˆ˜: 2

์ œ์กฐ์‚ฌ ๋ฐ ๋“ฑ๋ก ์ •๋ณด

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-10-19 13:01:17
  •  

- ์„ค๋ช…

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์ค‘์š”์„ฑ ๋ฐ PHPUnit ์†Œ๊ฐœ

uploadImage

#์†Œํ”„ํŠธ์›จ์–ด #๊ฐœ๋ฐœ์—์„œ #ํ…Œ์ŠคํŠธ(#Test)๋Š” ์ฝ”๋“œ์˜ #ํ’ˆ์งˆ๊ณผ #์•ˆ์ •์„ฑ(#Stability)์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ํ™œ๋™์ด์—์š”. ํŠนํžˆ, #๋‹จ์œ„ #ํ…Œ์ŠคํŠธ(#Unit_Test)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„(์ฃผ๋กœ #ํด๋ž˜์Šค ๋˜๋Š” #๋ฉ”์„œ๋“œ)๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ •ํ™•ํžˆ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์ด์—์š”. ์ด๋Š” #๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐœ๊ฒฌํ•˜๊ณ , #๋ฆฌํŒฉํ† ๋ง(#Refactoring) ์‹œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์†์ƒ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”.

#PHP ํ™˜๊ฒฝ์—์„œ๋Š” #PHPUnit์ด ์‚ฌ์‹ค์ƒ์˜ #ํ‘œ์ค€ #ํ…Œ์ŠคํŒ… #ํ”„๋ ˆ์ž„์›Œํฌ(#Testing_Framework)๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด์š”. #Java์˜ #JUnit ๊ณ„์—ด์„ ๋”ฐ๋ฅด๋ฉฐ, #๊ฐœ๋ฐœ์ž๊ฐ€ #ํ…Œ์ŠคํŠธ๋ฅผ #์ž๋™ํ™”ํ•˜๊ณ  #๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์š”.



PHPUnit ์„ค์น˜ ๋ฐ ๊ธฐ๋ณธ ์„ค์ •


#PHPUnit์€ ์ผ๋ฐ˜์ ์œผ๋กœ #Composer๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์š”.


1. Composer๋ฅผ ์ด์šฉํ•œ ์„ค์น˜


Bash

composer require --dev phpunit/phpunit

  • --dev ์˜ต์…˜์€ #PHPUnit์ด #๊ฐœ๋ฐœ(#Development) ํ™˜๊ฒฝ์—์„œ๋งŒ ํ•„์š”ํ•˜๋ฉฐ #์šด์˜(#Production) ํ™˜๊ฒฝ์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ์ง€์ •ํ•ด์š”.


2. ์„ค์ • ํŒŒ์ผ (phpunit.xml)


ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— phpunit.xml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ #ํ…Œ์ŠคํŠธ์˜ #๊ฒฝ๋กœ, #๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ, #์ฝ”๋“œ #์ปค๋ฒ„๋ฆฌ์ง€ ์„ค์ • ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

XML

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true">
    <testsuites>
        <testsuite name="Application">
            <directory>tests</directory> 
        </testsuite>
    </testsuites>
    </phpunit>



๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ž‘์„ฑ ์›์น™ ๋ฐ ๊ตฌ์กฐ

uploadImage

#PHPUnit์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ํŠน์ • #๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•ด์š”.


1. ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ๊ตฌ์กฐ


  • ์ƒ์†: ๋ชจ๋“  #ํ…Œ์ŠคํŠธ #ํด๋ž˜์Šค๋Š” PHPUnitFrameworkTestCase๋ฅผ #์ƒ์†๋ฐ›์•„์•ผ ํ•ด์š”.

  • ํŒŒ์ผ/ํด๋ž˜์Šค ๋ช…๋ช…: ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํด๋ž˜์Šค ์ด๋ฆ„ ๋’ค์— Test๋ฅผ ๋ถ™์ด๊ณ , tests/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์˜ˆ์š” (์˜ˆ: Calculator ํด๋ž˜์Šค -> CalculatorTest.php).

  • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ: ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์•ž์— test๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜, #@test #์–ด๋…ธํ…Œ์ด์…˜(#Annotation)์„ ๋ถ™์—ฌ์•ผ #PHPUnit์ด ์ด๋ฅผ #ํ…Œ์ŠคํŠธ๋กœ ์ธ์‹ํ•ด์š”.


2. AAA ํŒจํ„ด (Arrange-Act-Assert)


์ข‹์€ #๋‹จ์œ„ #ํ…Œ์ŠคํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ AAA ํŒจํ„ด์„ ๋”ฐ๋ผ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ผ์š”.

  1. Arrange (์ค€๋น„): ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์ดˆ๊ธฐ #์ƒํƒœ(#State), #๊ฐ์ฒด, #์ž…๋ ฅ #๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•ด์š”.

  2. Act (์‹คํ–‰): ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ์ฝ”๋“œ(๋ฉ”์„œ๋“œ)๋ฅผ ์‹คํ–‰ํ•ด์š”.

  3. Assert (๋‹จ์–ธ/๊ฒ€์ฆ): ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ #PHPUnit์˜ #๋‹จ์–ธ(#Assertion) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆํ•ด์š”.


3. ๋‹จ์–ธ(Assertion) ๋ฉ”์„œ๋“œ ์˜ˆ์‹œ


#PHPUnit์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ #๋‹จ์–ธ #๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์š”.

๋‹จ์–ธ ๋ฉ”์„œ๋“œ

์„ค๋ช…

$this->assertEquals($expected, $actual)

๋‘ ๊ฐ’์ด ๊ฐ™์€์ง€ ๊ฒ€์ฆํ•ด์š”.

$this->assertTrue($condition)

์กฐ๊ฑด์ด true์ธ์ง€ ๊ฒ€์ฆํ•ด์š”.

$this->assertCount($expectedCount, $array)

๋ฐฐ์—ด์˜ #์š”์†Œ #๊ฐœ์ˆ˜๋ฅผ ๊ฒ€์ฆํ•ด์š”.

$this->assertInstanceOf($expectedClass, $object)

๊ฐ์ฒด๊ฐ€ ํŠน์ • #ํด๋ž˜์Šค์˜ #์ธ์Šคํ„ด์Šค์ธ์ง€ ๊ฒ€์ฆํ•ด์š”.

$this->assertNull($variable)

๋ณ€์ˆ˜๊ฐ€ null์ธ์ง€ ๊ฒ€์ฆํ•ด์š”.


4. ์ฝ”๋“œ ์˜ˆ์‹œ


์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ„๋‹จํ•œ ๋ง์…ˆ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ Calculator ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์š”.

src/Calculator.php

PHP

<?php
class Calculator {
    public function add(int $a, int $b): int {
        return $a + $b;
    }
}

tests/CalculatorTest.php

PHP

<?php
use PHPUnitFrameworkTestCase;

class CalculatorTest extends TestCase {
    
    public function testAdditionOfTwoNumbers(): void {
        // Arrange (์ค€๋น„)
        $calculator = new Calculator();
        $expected = 5;
        
        // Act (์‹คํ–‰)
        $result = $calculator->add(2, 3);
        
        // Assert (๊ฒ€์ฆ)
        $this->assertEquals($expected, $result, "2 + 3์€ 5์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
    }
    
    public function testNegativeNumberAddition(): void {
        // Arrange
        $calculator = new Calculator();
        
        // Act & Assert (๋‹จ์ˆœํ™”)
        $this->assertEquals(0, $calculator->add(-5, 5));
    }
}



ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

uploadImage


1. ํ…Œ์ŠคํŠธ ์‹คํ–‰


ํ„ฐ๋ฏธ๋„์—์„œ #PHPUnit #์‹คํ–‰ ํŒŒ์ผ์„ ํ˜ธ์ถœํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์š”.

Bash

# Composer ์„ค์น˜ ์‹œ
./vendor/bin/phpunit 

# ํŠน์ • ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋งŒ ์‹คํ–‰
./vendor/bin/phpunit tests/CalculatorTest.php


2. Mock ๊ฐ์ฒด (Mock Object)


#๋‹จ์œ„ #ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋‹จ์œ„ ์™ธ์˜ **์™ธ๋ถ€ #์˜์กด์„ฑ(#Dependency)**์œผ๋กœ๋ถ€ํ„ฐ #๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ #์™ธ๋ถ€ #API ํ˜ธ์ถœ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์‹ค์ œ ์˜์กด์„ฑ ๋Œ€์‹  #Mock #๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ #ํ™˜๊ฒฝ์„ #๊ฒฉ๋ฆฌํ•ด์š”.

  • #Mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€, ์–ด๋–ค #์ธ์ž(#Argument)๋กœ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•˜๊ณ , ์ •ํ•ด์ง„ #๊ฒฐ๊ณผ๊ฐ’์„ #๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.


3. ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž (Data Provider)


๋™์ผํ•œ #ํ…Œ์ŠคํŠธ #๋กœ์ง์„ ์—ฌ๋Ÿฌ #์ž…๋ ฅ #๋ฐ์ดํ„ฐ #์„ธํŠธ๋กœ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ #๋ฐ์ดํ„ฐ #์ œ๊ณต์ž(#Data_Provider) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์š”. ์ด๋Š” #ํ…Œ์ŠคํŠธ #์ฝ”๋“œ์˜ #์ค‘๋ณต์„ ์ค„์ด๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.

PHP

    /**
     * @dataProvider additionProvider
     */
    public function testAdd(int $a, int $b, int $expected): void {
        $calculator = new Calculator();
        $this->assertEquals($expected, $calculator->add($a, $b));
    }
    
    public function additionProvider(): array {
        return [
            [0, 0, 0],
            [1, 1, 2],
            [10, 5, 15],
            [-1, 1, 0],
        ];
    }

#PHPUnit์€ #ํ…Œ์ŠคํŠธ #์ž๋™ํ™”์˜ ๊ธฐ๋ณธ์ด๋ฉฐ, ๊ฒฌ๊ณ ํ•œ #PHP #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์˜ˆ์š”. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ํ™•์‹ ์„ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์š”.



๊ธฐ๊ฐ„,์ˆ˜๋Ÿ‰๋ณ„ ์ถ”๊ฐ€50%ํ• ์ธ, KT์ดˆ๊ณ ์†IP, ๋ธ”๋กœ๊ทธ,์ง€์‹์ธ,์‡ผํ•‘,์ง€๋„ ๋งˆ์ผ€ํŒ… ๊ฐ€๋Šฅ

https://xn--299ao67b9qbmsf04c.net/