현재 위치: > 최신 기사 목록> PHP 장치 테스트 실용 가이드 : 조롱 객체를 사용하여 테스트 효율성을 향상시키는 방법

PHP 장치 테스트 실용 가이드 : 조롱 객체를 사용하여 테스트 효율성을 향상시키는 방법

M66 2025-09-29

단위 테스트에서 모의 ​​개체 개요

모의 객체는 유닛 테스트에서 일반적으로 사용되는 테스트 스탠드이며 클래스 또는 인터페이스의 동작을 시뮬레이션하는 데 사용되며 반환 값을 정확하게 제어하거나 예외를 제외 할 수 있습니다. Mock Object를 통해 개발자는 실제 종속성을 인스턴스화하지 않고도 기능 또는 방법의 대화식 논리를 테스트 할 수 있습니다.

모의 개체를 만듭니다

PHP에서는 getMockBuilder 메소드를 사용하여 모의 개체를 만들 수 있습니다. 이 메소드는 다음 매개 변수를 허용합니다.

  • $ OriginalClassName : 시뮬레이션 할 클래스 또는 인터페이스의 이름입니다.
  • $ methods (선택 사항) : 시뮬레이션이 필요한 메소드 배열.
 // 시뮬레이션 MyInterface 인터페이스
$mock = $this->getMockBuilder(MyInterface::class)
             ->getMock();

// 시뮬레이션 MyClass 类并시뮬레이션其方法
$mock = $this->getMockBuilder(MyClass::class)
             ->setMethods(['myMethod'])
             ->getMock();

모의 개체를 구성하십시오

모의 개체를 만든 후에는 반환 값 설정 또는 예외를 던지는 방법 방법을 통해 동작을 구성 할 수 있습니다.

 // 구성 Mock 반환 할 대상 'foo'
$mock->method('getMyMethod')
     ->willReturn('foo');

// 구성 Mock 예외를 던지는 개체
$mock->method('myOtherMethod')
     ->willThrowException(new RuntimeException());

실제 사례

다음은 단위 테스트에서 모의 ​​개체를 사용하는 방법을 보여주는 예입니다. MyService 클래스에 의존하는 MyClass 클래스가 있다고 가정합니다.

 class MyClass
{
    private $myService;

    public function __construct(MyService $myService)
    {
        $this->myService = $myService;
    }

    public function doSomething(): string
    {
        return $this->myService->getData();
    }
}

MyService 클래스에는 문자열 "foo"를 반환하는 getData 메소드가 포함되어 있습니다. myclass :: dosomething 메소드를 테스트하려면 Mock Object를 사용할 수 있습니다.

 class MyClassTest extends PHPUnit_Framework_TestCase
{
    public function testDoSomething()
    {
        // 만들다 MyService Mock 물체
        $mockService = $this->getMockBuilder(MyService::class)
                            ->setMethods(['getData'])
                            ->getMock();

        // 구성 Mock 물체반품 "bar"
        $mockService->method('getData')
                    ->willReturn('bar');

        // 만들다 MyClass 인스턴스 및 주입 Mock 물체
        $myClass = new MyClass($mockService);

        // 확언 MyClass::doSomething 반품 "bar"
        $this->assertEquals('bar', $myClass->doSomething());
    }
}

이 테스트에서 MyService의 Mock Object를 만들고 반환 값을 "Bar"로 설정했습니다. 그런 다음 Mock 객체를 MyClass 인스턴스에 주입 한 후 MyClass와 MyService 간의 상호 작용이 어설 션을 통해 올바른지 확인하십시오.

Mock Objects를 사용하여 개발자는 실제 서비스 나 복잡한 환경에 의존하지 않고 단위 테스트에서 종속성 및 비즈니스 로직을 효율적으로 검증 할 수 있습니다.