Zend Framework - Birim Testi

Genel olarak, bir PHP uygulamasının hatalarını advanced debugger tool veya gibi basit komutlar kullanarak echo ve die. Bir web senaryosunda, iş mantığını ve sunum katmanını test etmemiz gerekir. Bir web uygulamasındaki formlar, formların beklendiği gibi çalıştığından emin olmak için ilgili test verileri girilerek test edilebilir.

Bir web sitesinin tasarımı, bir tarayıcı kullanılarak manuel olarak test edilebilir. Bu tür test süreçleri, birim testi kullanılarak otomatik hale getirilebilir. Büyük projelerde birim testi şarttır. Bu birim testleri, test sürecini otomatikleştirmeye ve bir şeyler ters gittiğinde geliştiriciyi uyarmaya yardımcı olacaktır.

PHPUnit'i kurma

Zend çerçevesi, PHPUnit birim testi çerçevesiyle bütünleşir. Zend çerçevesi için bir birim testi yazmak için, aşağıdaki Composer komutunu kullanarak kolayca yapılabilen PHPUnit'i kurmamız gerekir.

$ composer require --dev phpunit/phpunit

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki kod bloğunda gösterildiği gibi bir yanıt alacaksınız.

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

Şimdi, "composer.json" dosyasını açtığınızda, aşağıdaki değişiklikleri göreceksiniz -

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

TestCase ve Onaylar

Zend çerçevesi, denetleyiciyi birim test etmek için yardımcı sınıflar sağlar. TestCase bir içindeki ana bileşendir PHPUnit Test durumlarını yazmak için çerçeve ve Zend Çerçevesi, TestCase'in soyut bir uygulamasını sağlar. AbstractHttpControllerTestCase.

Bu AbstractHttpControllerTestCase, çeşitli Assertyöntemler ve işlevselliğe göre gruplandırılabilir. Bunlar aşağıdaki gibidir -

  • Request Assertions- http talebini belirtmek için kullanılır. Örneğin, assertControllerName.

  • CSS Select Assertions - HTML DOM modelini kullanarak yanıt HTML'sini kontrol etmek için kullanılır.

  • XPath Assertions - XPath'e dayalı CSS seçim iddialarına bir alternatif.

  • Redirect Assertions - Sayfanın yeniden yönlendirilmesini kontrol etmek için kullanılır.

  • Response Header Assertions - Yanıt başlığını durum kodu gibi kontrol etmek için kullanılır (assertResponseStatusCode)

Test Dizini Oluşturun

Her modül için ayrı ayrı birim testi yazılabilir. Testle ilgili tüm kodlamaların,test modülün kök dizini altındaki klasör.

Örneğin, Tutorial modülü altında bulunan TutorialController için bir test yazmak için, test sınıfının myapp / module / Tutorial / test / Controller / dizini altına yerleştirilmesi gerekir.

Misal

Birim testi yapmak için bir test sınıfı yazalım. TutorialController.

Başlangıç ​​olarak, TutorialControllerTest adlı bir sınıf yazmalı ve bunu AbstractHttpControllerTestCase'e genişletmeliyiz.

Bir sonraki adım, bir Setuptest ortamını kurma yöntemi. Bunu arayarak yapılabilir.setApplicationConfig yöntem ve ana uygulama yapılandırma dosyamız myapp / config / application.config.php'yi iletmek

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

Bir veya daha fazla yöntem yazın ve gereksinime bağlı olarak çeşitli iddia yöntemlerini çağırın.

$this->assertMatchedRouteName('tutorial');

Test sınıfını yazdık ve listenin tamamı aşağıdaki gibidir -

<?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'); 
   } 
}

Şimdi bir komut istemi açın, uygulama kök dizinine gidin ve phpunit içinde çalıştırılabilir vendor Klasör.

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

Sonuç, aşağıdaki kod bloğunda gösterildiği gibi olacaktır -

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