Zend 프레임 워크-단위 테스트

일반적으로 다음을 사용하여 PHP 애플리케이션을 디버깅 할 수 있습니다. advanced debugger tool 또는 다음과 같은 간단한 명령을 사용하여 echodie. 웹 시나리오에서는 비즈니스 로직과 프리젠 테이션 레이어를 테스트해야합니다. 웹 애플리케이션의 양식은 관련 테스트 데이터를 입력하여 테스트하여 양식이 예상대로 작동하는지 확인할 수 있습니다.

웹 사이트 디자인은 브라우저를 사용하여 수동으로 테스트 할 수 있습니다. 이러한 유형의 테스트 프로세스는 단위 테스트를 사용하여 자동화 할 수 있습니다. 대규모 프로젝트에서는 단위 테스트가 필수적입니다. 이러한 단위 테스트는 테스트 프로세스를 자동화하고 문제가 발생하면 개발자에게 경고하는 데 도움이됩니다.

PHPUnit 설정

Zend 프레임 워크는 PHPUnit 단위 테스트 프레임 워크와 통합됩니다. Zend 프레임 워크에 대한 단위 테스트를 작성하려면 다음 Composer 명령을 사용하여 쉽게 수행 할 수있는 PHPUnit을 설정해야합니다.

$ composer require --dev phpunit/phpunit

위의 명령을 실행하면 다음 코드 블록과 같은 응답을 받게됩니다.

Using version ^5.7 for phpunit/phpunit 
./composer.json has been updated 
Loading composer repositories with package information 
Updating dependencies (including require-dev) 
Nothing to install or update 
Writing lock file 
Generating autoload files

이제“composer.json”파일을 열면 다음과 같은 변경 사항이 표시됩니다.

"require-dev": { 
   "phpunit/phpunit": "^5.7" 
}

TestCase 및 어설 션

Zend 프레임 워크는 컨트롤러를 단위 테스트하기위한 도우미 클래스를 제공합니다. 그만큼TestCase 의 주요 구성 요소입니다 PHPUnit 테스트 케이스를 작성하기위한 프레임 워크와 Zend 프레임 워크는 TestCase의 추상적 인 구현을 제공합니다. AbstractHttpControllerTestCase.

이 AbstractHttpControllerTestCase는 다양한 Assert기능별로 그룹화 할 수 있습니다. 그들은 다음과 같습니다-

  • Request Assertions− http 요청을 주장하는 데 사용됩니다. 예를 들어 assertControllerName입니다.

  • CSS Select Assertions − HTML DOM 모델을 사용하여 응답 HTML을 확인하는 데 사용됩니다.

  • XPath Assertions − XPath를 기반으로하는 CSS 선택 어설 션의 대안.

  • Redirect Assertions − 페이지 리디렉션을 확인하는 데 사용됩니다.

  • Response Header Assertions − 상태 코드 (assertResponseStatusCode)와 같은 응답 헤더 확인에 사용

테스트 디렉토리 생성

단위 테스트는 각 모듈에 대해 개별적으로 작성할 수 있습니다. 모든 테스트 관련 코딩은test 모듈의 루트 디렉토리 아래에있는 폴더.

예를 들어 Tutorial 모듈에서 사용할 수있는 TutorialController에 대한 테스트를 작성하려면 테스트 클래스가 myapp / module / Tutorial / test / Controller / 디렉터리에 있어야합니다.

단위 테스트를위한 테스트 클래스를 작성하겠습니다. TutorialController.

먼저 TutorialControllerTest라는 클래스를 작성하고이를 AbstractHttpControllerTestCase로 확장해야합니다.

다음 단계는 Setup테스트 환경을 설정하는 방법. 이것은 다음을 호출하여 수행 할 수 있습니다.setApplicationConfig 메서드 및 기본 응용 프로그램 구성 파일 myapp / config / application.config.php 전달

public function setUp() { 
   $configOverrides = [];  
   $this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides 
   )); 
   parent::setUp(); 
}

하나 이상의 메서드를 작성하고 요구 사항에 따라 다양한 assert 메서드를 호출합니다.

$this->assertMatchedRouteName('tutorial');

우리는 테스트 클래스를 작성했으며 전체 목록은 다음과 같습니다.

<?php  
namespace TutorialTest\Controller;  
use Tutorial\Controller\TutorialController; 
use Zend\Stdlib\ArrayUtils; 
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;  

class TutorialControllerTest extends AbstractHttpControllerTestCase { 
   public function setUp() { 
      $configOverrides = [];  
      $this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides 
      ));  
      parent::setUp(); 
   }  
   public function testIndexActionCanBeAccessed() { 
      $this->dispatch('/tutorial', 'GET'); $this->assertResponseStatusCode(200); 
      $this->assertModuleName('tutorial'); $this->assertControllerName(TutorialController::class); 
      $this->assertControllerClass('TutorialController'); $this->assertMatchedRouteName('tutorial'); 
   } 
}

이제 명령 프롬프트를 열고 응용 프로그램 루트 디렉토리로 이동하여 phpunit 내부에서 사용할 수있는 실행 파일 vendor 폴더.

cd /path/to/app  
./vendor/bin/phpunit ./vendor/bin/phpunit module/
   Tutorial/test/Controller/TutorialControllerTest.php

결과는 다음 코드 블록과 같습니다.

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.  
.1 / 1 (100%)  
Time: 96 ms, Memory: 8.00MB  
OK (1 test, 5 assertions)