- Zend 框架教程
- Zend 框架 - 主页
- Zend 框架 - 简介
- Zend 框架 - 安装
- 骨架应用
- Zend 框架 - MVC 架构
- Zend 框架 - 概念
- Zend 框架 - 服务管理器
- Zend 框架 - 事件管理器
- Zend 框架 - 模块系统
- 应用结构
- Zend 框架 - 创建模块
- Zend 框架 - 控制器
- Zend 框架 - 路由
- Zend 框架 - 视图层
- Zend 框架 - 布局
- 模型和数据库
- 不同的数据库
- 表格和验证
- Zend 框架 - 文件上传
- Zend 框架 - Ajax
- Cookie 管理
- 会话管理
- Zend 框架 - 身份验证
- 电子邮件管理
- Zend 框架 - 单元测试
- Zend 框架 - 错误处理
- Zend 框架 - 工作示例
- Zend 框架有用的资源
- Zend 框架 - 快速指南
- Zend 框架 - 有用的资源
- Zend 框架 - 讨论
Zend 框架 - 单元测试
一般来说,我们可以使用高级调试器工具或使用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" }
测试用例和断言
Zend 框架提供了帮助程序类来对控制器进行单元测试。TestCase是PHPUnit框架中用于编写测试用例的主要组件,Zend Framework 提供了 TestCase 的抽象实现,称为AbstractHttpControllerTestCase。
这个 AbstractHttpControllerTestCase 提供了各种Assert方法,并且可以按功能分组。它们如下 -
请求断言- 用于断言 http 请求。例如,assertControllerName。
CSS Select Assertions - 用于使用 HTML DOM 模型检查响应 HTML。
XPath 断言- 基于 XPath 的 CSS 选择断言的替代方案。
重定向断言- 用于检查页面重定向。
响应标头断言- 用于检查响应标头,如状态代码 (assertResponseStatusCode)
创建测试目录
可以为每个模块单独编写单元测试。所有与测试相关的代码都需要在模块根目录下的test文件夹中创建。
例如,要为Tutorial模块下可用的TutorialController编写测试,测试类需要放置在myapp/module/Tutorial/test/Controller/目录下。
例子
让我们编写一个测试类来对 TutorialController 进行单元测试。
首先,我们应该编写一个名为TutorialControllerTest 的类并将其扩展为AbstractHttpControllerTestCase。
下一步是编写一个安装方法来设置测试环境。这可以通过调用setApplicationConfig方法并传递我们的主应用程序配置文件 myapp/config/application.config.php 来完成
public function setUp() { $configOverrides = []; $this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides )); parent::setUp(); }
根据需求编写一个或多个方法并调用各种断言方法。
$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'); } }
现在,打开命令提示符,转到应用程序根目录并执行供应商文件夹中可用的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)