PHP 단위 테스트에 PHPUnit을 사용하는 방법

WBOY
풀어 주다: 2023-05-12 08:46:01
원래의
1127명이 탐색했습니다.

소프트웨어 개발 산업이 발전하면서 테스트는 점차 없어서는 안 될 부분이 되었습니다. 소프트웨어 테스팅의 가장 기본적인 부분인 단위 테스팅은 코드 품질을 향상시킬 뿐만 아니라 개발자의 코드 개발 및 유지 관리 속도를 높일 수 있습니다. PHP 분야에서 PHPUnit은 고품질 테스트 케이스를 작성하는 데 도움이 되는 다양한 기능을 제공하는 매우 인기 있는 단위 테스트 프레임워크입니다. 이 기사에서는 PHP 단위 테스트에 PHPUnit을 사용하는 방법을 다룹니다.

  1. PHPUnit 설치

PHPUnit을 사용하기 전에 먼저 PHPUnit을 설치해야 합니다. PHPUnit은 Composer를 사용하여 설치할 수 있는 PHP 라이브러리입니다. 프로젝트 루트에서 다음 명령을 실행하세요:

composer require --dev phpunit/phpunit
로그인 후 복사

이렇게 하면 PHPUnit이 개발 종속성으로 프로젝트에 추가됩니다.

  1. 테스트 케이스 작성

테스트 케이스 작성은 일반적으로 PHPUnit을 사용할 때 첫 번째 단계입니다. 테스트 케이스는 하나 이상의 함수나 메소드를 테스트하는 스크립트입니다. Calculator 클래스가 있다고 가정합니다:

class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }
}
로그인 후 복사

테스트 케이스를 사용하여 Calculator 클래스의 add 메소드를 테스트할 수 있습니다:

use PHPUnitFrameworkTestCase;

class CalculatorTest extends TestCase {
    public function testAdd() {
        $calculator = new Calculator();
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
    }
}
로그인 후 복사

이 테스트 케이스에서는 PHPUnitFrameworkTestCase 클래스를 상속하는 CalculatorTest라는 테스트 클래스를 생성합니다. 우리는 또한 Calculator 인스턴스를 생성하고 add 메소드를 실행한 testAdd라는 테스트 메소드를 작성했으며, 마지막으로 $this->assertEquals를 사용하여 add 메소드에 의해 반환된 결과가 예상 값과 같은지 테스트했습니다.

  1. 테스트 케이스 실행

테스트 케이스를 작성한 후에는 PHPUnit을 사용하여 실행할 수 있습니다. 프로젝트 루트에서 다음 명령을 실행합니다:

vendor/bin/phpunit
로그인 후 복사

그러면 PHPUnit이 실행되고 사용 가능한 모든 테스트 사례가 실행됩니다. 특정 테스트 클래스나 테스트 메서드만 실행하려는 경우 다음 명령을 사용할 수 있습니다.

vendor/bin/phpunit tests/CalculatorTest.php
vendor/bin/phpunit --filter testAdd tests/CalculatorTest.php
로그인 후 복사
  1. 어설션 사용

PHPUnit은 함수의 반환 값을 테스트하는 데 사용할 수 있는 다양한 어설션 함수를 제공합니다. 또는 방법은 우리의 기대에 부응합니다. 다음은 PHPUnit에서 가장 일반적으로 사용되는 어설션 함수 중 일부입니다.

  • assertTrue($value): $value가 true인지 테스트
  • assertFalse($value): $value가 false인지 테스트
  • assertEquals($expected, $actual) : $actual이 $expected
  • assertNotEquals($expected, $actual)와 같은지 테스트합니다. $actual이 $expected
  • assertSame($expected, $actual)과 같은지 테스트합니다. $actual이 다음과 같은지 테스트합니다. $expected
  • assertNotSame( $expected, $actual)과 동일: $actual이 $expected
  • assertNull($value)과 동일합니다. $value가 null인지 테스트
  • assertNotNull($value): $가 null인지 테스트합니다. 값이 null이 아닙니다
  • assertInstanceOf($expected , $actual): $actual이 $expected
  • assertNotInstanceOf($expected, $actual)의 인스턴스인지 테스트합니다. $actual이 $expected
    의 인스턴스가 아닌지 테스트합니다.
  1. 데이터 공급자 사용

경우에 따라 함수나 메서드가 다양한 입력에 대해 올바른 결과를 반환하는지 테스트해야 합니다. 이때 PHPUnit의 데이터 제공자 기능을 사용할 수 있습니다. 데이터 공급자는 테스트할 수 있는 데이터 모음인 매개 변수 집합을 제공하는 메서드입니다.

아래 예에서는 서로 다른 입력 데이터와 예상 출력을 제공하는 Calculator 클래스의 add 메서드에 대한 데이터 공급자를 작성했습니다.

class CalculatorTest extends TestCase {
    /**
     * @dataProvider additionProvider
     */
    public function testAdd($a, $b, $expected) {
        $calculator = new Calculator();
        $result = $calculator->add($a, $b);
        $this->assertEquals($expected, $result);
    }

    public function additionProvider() {
        return [
            [0, 0, 0],
            [0, 1, 1],
            [1, 0, 1],
            [1, 1, 2],
            [2, 3, 5],
            [-1, 1, 0],
            [10, -5, 5]
        ];
    }
}
로그인 후 복사

이 테스트 사례에서는 @DataProvider 주석을 사용하여 PHPUnit에 데이터 공급자를 찾을 수 있는 위치를 알려줍니다. 우리는 다른 입력 데이터와 예상 출력을 제공하는 추가 제공자라는 데이터 공급자를 작성했습니다. testAdd 테스트 메소드에서는 이 데이터를 직접 전달하여 테스트했습니다.

  1. 모의 객체 사용

객체에서 메서드를 테스트할 때 다른 클래스나 외부 리소스에 의존하고 싶지 않을 수도 있습니다. 현재 우리는 PHPUnit의 Mock 객체를 사용하여 이러한 종속성을 시뮬레이션할 수 있습니다. Mock 객체는 동일한 인터페이스를 제공하지만 실제로 인스턴스화되지는 않는 모의 객체입니다.

다음 예제에서는 외부 종속성을 시뮬레이션하기 위해 Calculator 클래스의 add 메서드에 대한 Mock 객체를 작성했습니다.

class CalculatorTest extends TestCase {
    public function testAdd() {
        $mock = $this->getMockBuilder('Dependency')
                     ->getMock();
        $mock->expects($this->once())
             ->method('getValue')
             ->will($this->returnValue(5));

        $calculator = new Calculator($mock);
        $result = $calculator->add(2, 3);
        $this->assertEquals(10, $result);
    }
}
로그인 후 복사

이 테스트 사례에서는 getMockBuilder 메서드를 사용하여 종속성이라는 Mock 객체를 생성합니다. 그런 다음 Mock 객체의 getValue 메서드가 한 번 호출되고 5를 반환할 것으로 예상합니다. 마지막으로 이 Mock 객체를 Calculator 클래스의 생성자에 전달합니다.

요약

이 기사에서는 PHP 단위 테스트에 PHPUnit을 사용하는 방법을 배웠습니다. 우리는 PHPUnit을 설치하고, 테스트 케이스를 작성하고, 테스트 케이스를 실행하고, 어설션, 데이터 공급자 및 Mock 객체를 사용했습니다. 이러한 단계를 통해 코드 품질을 향상하고 개발 및 유지 관리 속도를 높이기 위해 코드를 테스트하는 고품질 테스트 사례를 작성할 수 있습니다.

위 내용은 PHP 단위 테스트에 PHPUnit을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!