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)