- Zend Framework 教程
- Zend Framework - 首頁
- Zend Framework - 簡介
- Zend Framework - 安裝
- 框架應用
- Zend Framework - MVC 架構
- Zend Framework - 概念
- Zend Framework - 服務管理器
- Zend Framework - 事件管理器
- Zend Framework - 模組系統
- 應用結構
- Zend Framework - 建立模組
- Zend Framework - 控制器
- Zend Framework - 路由
- Zend Framework - 檢視層
- Zend Framework - 佈局
- 模型 & 資料庫
- 不同的資料庫
- 表單 & 驗證
- Zend Framework - 檔案上傳
- Zend Framework - Ajax
- Cookie 管理
- 會話管理
- Zend Framework - 身份驗證
- 郵件管理
- Zend Framework - 單元測試
- Zend Framework - 錯誤處理
- Zend Framework - 工作示例
- Zend Framework 有用資源
- Zend Framework - 快速指南
- Zend Framework - 有用資源
- Zend Framework - 討論
Zend Framework - 單元測試
一般來說,我們可以使用**高階除錯工具**或簡單的命令如**echo**和**die**來除錯PHP應用程式。在Web場景中,我們需要測試業務邏輯以及表示層。可以透過輸入相關的測試資料來測試Web應用程式中的表單,以確保表單按預期工作。
網站的設計可以透過瀏覽器手動測試。這類測試過程可以使用單元測試自動化。單元測試在大型專案中至關重要。這些單元測試將有助於自動化測試過程,並在出現問題時提醒開發者。
設定 PHPUnit
Zend框架與PHPUnit單元測試框架整合。要為Zend框架編寫單元測試,我們需要設定PHPUnit,這可以透過以下Composer命令輕鬆完成。
$ 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**方法,並可以按功能分組。它們如下:
**請求斷言** - 用於斷言HTTP請求。例如,assertControllerName。
**CSS選擇器斷言** - 使用HTML DOM模型檢查響應HTML。
**XPath斷言** - 基於XPath的CSS選擇器斷言的替代方法。
**重定向斷言** - 用於檢查頁面重定向。
**響應頭斷言** - 用於檢查響應頭,例如狀態程式碼(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');
}
}
現在,開啟命令提示符,移動到應用程式根目錄,並執行**vendor**資料夾中可用的**phpunit**可執行檔案。
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)