Zend Framework - Pengujian Unit

Secara umum, kita dapat men-debug aplikasi PHP dengan menggunakan advanced debugger tool atau dengan menggunakan perintah sederhana seperti echo dan die. Dalam skenario web, kita perlu menguji logika bisnis serta lapisan presentasi. Formulir dalam aplikasi web dapat diuji dengan memasukkan data uji yang relevan untuk memastikan bahwa formulir berfungsi seperti yang diharapkan.

Desain sebuah situs web dapat diuji secara manual dengan menggunakan browser. Jenis proses pengujian ini dapat diotomatiskan menggunakan pengujian unit. Tes unit sangat penting dalam proyek besar. Pengujian unit ini akan membantu mengotomatiskan proses pengujian dan memperingatkan pengembang jika terjadi kesalahan.

Menyiapkan PHPUnit

Kerangka Zend terintegrasi dengan kerangka kerja pengujian unit PHPUnit. Untuk menulis pengujian unit untuk framework Zend, kita perlu mengatur PHPUnit, yang dapat dengan mudah dilakukan dengan menggunakan perintah Composer berikut.

$ composer require --dev phpunit/phpunit

Setelah menjalankan perintah di atas, Anda akan mendapatkan respons seperti yang ditunjukkan pada blok kode berikut.

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

Sekarang, saat Anda membuka file "composer.json", Anda akan melihat perubahan berikut -

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

TestCase dan Assertions

Kerangka Zend menyediakan kelas pembantu untuk menguji unit pengontrol. ItuTestCase adalah komponen utama dalam a PHPUnit framework untuk menulis kasus uji dan Zend Framework menyediakan implementasi abstrak dari TestCase yang disebut sebagai file AbstractHttpControllerTestCase.

AbstractHttpControllerTestCase ini menyediakan berbagai Assertmetode dan dapat dikelompokkan berdasarkan fungsionalitas. Mereka adalah sebagai berikut -

  • Request Assertions- Digunakan untuk menegaskan permintaan http. Misalnya, assertControllerName.

  • CSS Select Assertions - Digunakan untuk memeriksa respon HTML menggunakan model DOM HTML.

  • XPath Assertions - Alternatif untuk pernyataan pemilihan CSS berdasarkan XPath.

  • Redirect Assertions - Digunakan untuk memeriksa pengalihan halaman.

  • Response Header Assertions - Digunakan untuk memeriksa header respons seperti kode status (assertResponseStatusCode)

Buat Direktori Tes

Tes unit dapat ditulis secara terpisah untuk setiap modul. Semua pengkodean terkait pengujian perlu dibuat di dalamtest folder di bawah direktori root modul.

Misalnya, untuk menulis pengujian untuk TutorialController yang tersedia di bawah modul Tutorial, kelas pengujian harus ditempatkan di direktori myapp / module / Tutorial / test / Controller /.

Contoh

Mari kita tulis kelas uji untuk menguji unit TutorialController.

Untuk memulainya, kita harus menulis kelas yang disebut TutorialControllerTest dan memperluasnya ke AbstractHttpControllerTestCase.

Langkah selanjutnya adalah menulis a Setupmetode untuk menyiapkan lingkungan pengujian. Ini dapat dilakukan dengan memanggilsetApplicationConfig metode dan meneruskan file konfigurasi aplikasi utama kami myapp / config / application.config.php

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

Tulis satu atau beberapa metode dan panggil berbagai metode assert tergantung pada kebutuhan.

$this->assertMatchedRouteName('tutorial');

Kami telah menulis kelas tes dan daftar lengkapnya adalah sebagai berikut -

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

Sekarang, buka prompt perintah, lanjutkan ke direktori root aplikasi dan jalankan file phpunit dieksekusi tersedia di dalam vendor map.

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

Hasilnya akan seperti yang ditunjukkan pada blok kode berikut -

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