- 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)