Zend Framework - Unit Testing
Nói chung, chúng tôi có thể gỡ lỗi một ứng dụng PHP bằng cách sử dụng advanced debugger tool hoặc bằng cách sử dụng các lệnh đơn giản như echo và die. Trong một kịch bản web, chúng ta cần kiểm tra lôgic nghiệp vụ cũng như lớp trình bày. Biểu mẫu trong ứng dụng web có thể được kiểm tra bằng cách nhập dữ liệu kiểm tra có liên quan để đảm bảo rằng biểu mẫu đang hoạt động như mong đợi.
Thiết kế của một trang web có thể được kiểm tra thủ công bằng cách sử dụng trình duyệt. Loại quy trình kiểm tra này có thể được tự động hóa bằng cách sử dụng kiểm thử đơn vị. Một bài kiểm tra đơn vị là điều cần thiết trong các dự án lớn. Các bài kiểm tra đơn vị này sẽ giúp tự động hóa quá trình kiểm tra và cảnh báo cho nhà phát triển khi có sự cố.
Thiết lập PHPUnit
Khung công tác Zend tích hợp với khung thử nghiệm đơn vị PHPUnit. Để viết một bài kiểm tra đơn vị cho khung công tác Zend, chúng ta cần thiết lập PHPUnit, có thể dễ dàng thực hiện bằng cách sử dụng lệnh Composer sau đây.
$ composer require --dev phpunit/phpunit
Sau khi thực hiện lệnh trên, bạn sẽ nhận được phản hồi như trong khối mã sau.
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
Bây giờ, khi bạn mở tệp “composer.json”, bạn sẽ thấy những thay đổi sau:
"require-dev": {
"phpunit/phpunit": "^5.7"
}
TestCase và Assertions
Khung công tác Zend cung cấp các lớp trợ giúp để đơn vị kiểm tra bộ điều khiển. CácTestCase là thành phần chính trong một PHPUnit khung để viết các trường hợp kiểm thử và Zend Framework cung cấp một triển khai trừu tượng của TestCase được gọi là AbstractHttpControllerTestCase.
AbstractHttpControllerTestCase này cung cấp nhiều Assertvà có thể được nhóm theo chức năng. Chúng như sau:
Request Assertions- Được sử dụng để xác nhận yêu cầu http. Ví dụ, khẳng địnhControllerName.
CSS Select Assertions - Được sử dụng để kiểm tra HTML phản hồi bằng cách sử dụng mô hình HTML DOM.
XPath Assertions - Một thay thế cho các xác nhận lựa chọn CSS dựa trên XPath.
Redirect Assertions - Dùng để kiểm tra chuyển hướng trang.
Response Header Assertions - Được sử dụng để kiểm tra tiêu đề phản hồi như mã trạng thái (khẳng địnhResponseStatusCode)
Tạo thư mục thử nghiệm
Một bài kiểm tra đơn vị có thể được viết riêng cho từng mô-đun. Tất cả mã hóa liên quan đến thử nghiệm cần được tạo bên trongtest thư mục trong thư mục gốc của mô-đun.
Ví dụ: để viết một bài kiểm tra cho TutorialController có sẵn trong mô-đun Hướng dẫn, lớp kiểm tra cần được đặt trong thư mục myapp / module / Tutorial / test / Controller /.
Thí dụ
Hãy để chúng tôi viết một lớp thử nghiệm để kiểm tra đơn vị TutorialController.
Để bắt đầu, chúng ta nên viết một lớp có tên là TutorialControllerTest và mở rộng nó thành AbstractHttpControllerTestCase.
Bước tiếp theo là viết một Setupphương pháp thiết lập môi trường thử nghiệm. Điều này có thể được thực hiện bằng cách gọisetApplicationConfig và chuyển tệp cấu hình ứng dụng chính của chúng tôi myapp / config / application.config.php
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides
));
parent::setUp();
}
Viết một hoặc nhiều phương thức và gọi các phương thức xác nhận khác nhau tùy thuộc vào yêu cầu.
$this->assertMatchedRouteName('tutorial');
Chúng tôi đã viết lớp thử nghiệm và danh sách đầy đủ như sau:
<?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');
}
}
Bây giờ, mở dấu nhắc lệnh, chuyển đến thư mục gốc của ứng dụng và thực thi phpunit có thể thực thi bên trong vendor thư mục.
cd /path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
Tutorial/test/Controller/TutorialControllerTest.php
Kết quả sẽ được hiển thị trong khối mã sau:
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
.1 / 1 (100%)
Time: 96 ms, Memory: 8.00MB
OK (1 test, 5 assertions)