测试
测试是软件开发中必不可少的环节.无论我们是否意识到,在开发Web应用的时候,我们始终都是在测试的.例如, 当我们用PHP写了一个类时, 我们可能会用到一些注入 echo 或者 die 语句来显示我们是否正确地实现了某个方法;当我们实现了包含一套复杂的HTML表单的web页面时, 我们可能会试着输入一些测试数据来确认页面是否是按照我们的预期来交互的.更高级的开发者则会写一些代码来自动完成这个测试过程, 这样一来每当我们需要测试一些东西的时候, 我们只需要调用代码, 剩下来的就交给计算机了. 这就是所谓的 自动测试, 也是本章的主要话题.
Yii 提供的测试支持包括 单元测试 和 功能测试.
单元测试检验了代码的一个独立单元是否按照预期工作. 在面向对象编程中, 最基本的代码单元就是类. 因此, 单元测试的主要职责就是校验这个类所实现的每个方法工作都是正常的. 单元测试通常是由开发了这个类的人来编写.
功能测试检验了特性是否按照预期工作(如:在一个博客系统里的提交操作).与单元测试相比, 功能测试通常要高级一些, 因为待测试的特性常常牵涉到多个类. 功能测试通常是由非常了解系统需求的人编写.(这个人既可以是开发者也可以是质量工程师).
测试驱动开发
以下展示的便是所谓的 测试驱动开发 (TDD) 的开发周期:
创建一个涵盖要实现的特性的新的测试. 测试预计将在第一次执行的时候失败, 因为特性尚未实现.
执行所有测试,确保这个新的测试是失败的.
编写代码来使得测试通过.
执行所有测试,确保所有测试通过.
重构新编写的代码并确保这些测试仍然能够通过.
重复步骤1至5推进整体功能的实现.
构建测试环境
Yii 提供的测试支持需要 PHPUnit 3.5+ 和 Selenium Remote Control 1.0+.请参照他们提供的文档来安装 PHPUnit 和 Selenium Remote Control.
当我们使用 yiic webapp 控制台命令来创建一个新的 Yii 应用时, 它将会生成以下文件和目录供我们来编写和完成测试.
testdrive/
protected/ 包含了受保护的应用文件
tests/ 包含了应用测试
fixtures/ 包含了数据 fixtures
functional/ 包含了功能测试
unit/ 包含了单元测试
report/ 包含了 coverage 报告
bootstrap.php 这个脚本在一开始执行
phpunit.xml PHPUnit 配置文件
WebTestCase.php 基于 Web 的功能测试基类
如上所示的, 我们的测试代码主要放在 fixtures, functional 和 unit 这三个目录下, report 目录则用于存储生成的代码 coverage 报告.
我们可以在控制台窗口执行以下命令来执行测试(无论是单元测试还是功能测试):
% cd testdrive/protected/tests
% phpunit functional/PostTest.php // 执行单个测试
% phpunit --verbose functional // 执行 'functional' 下的所有测试
% phpunit --coverage-html ./report unit
上面的最后一条命令将执行 unit 目录下的所有测试然后在 report 目录下生成出一份 code-coverage 报告. 注意要生成 code-coverage 报告必须安装并开启PHP的 xdebug 扩展 .
测试的引导脚本
让我们来看看 bootstrap.php 文件里会有些什么. 首先这个文件有点特殊,因为它看起来很像是 入口脚本, 而它也正是我们执行一系列测试的入口.
$yiit='path/to/yii/framework/yiit.php';
$config=dirname(__FILE__).'/../config/test.php';
require_once($yiit);
require_once(dirname(__FILE__).'/WebTestCase.php');
Yii::createWebApplication($config);
如上所示, 首先我们包含了来自 Yii 框架的 yiit.php 文件, 它初始化了一些全局常量以及必要的测试基类.然后我们使用 test.php 这个配置文件来创建一个应用实例.如果你查看 test.php 文件, 你会发现它是继承自 main.php 这个配置文件的, 只不过它多加了一个类名为 CDbFixtureManager 的 fixture 应用组件.我们将在下一节中详细的介绍 fixtures.
return CMap::mergeArray(
require(dirname(__FILE__).'/main.php'),
array(
'components'=>array(
'fixture'=>array(
'class'=>'system.test.CDbFixtureManager',
),
/* 去除以下注释可为测试提供一个数据库连接.
'db'=>array(
'connectionString'=>'DSN for test database',
),
*/
),
)
);
当我执行那些涉及到数据库操作的测试时, 我们应该提供一个测试专用的数据库以便测试执行不会干扰到正常的开发或者生产活动. 这样一来, 我们纸需要去除上面 db 配置的注释, 然后填写 connectionString 属性的用以连接到数据库的DSN(数据源名称)即可.
通过这样一个启动脚本, 当我们执行单元测试时, 我们便可以获得一个与服务需求类似的应用实例, 而主要的不同就是测试拥有一个 fixture 管理器以及它专属的测试数据库.
分享到:
相关推荐
8. **tests**:测试目录,包含单元测试和集成测试用例。 9. **.gitignore** 和 **composer.json**:分别定义了版本控制系统忽略的文件和项目依赖信息,以及项目的元数据。 安装和使用 Yii 2 Advanced 模板通常涉及...
8. **tests**:测试目录,包含单元测试和集成测试的相关文件。 安装和使用 "yii-advanced-app-2.0.4" 需要基本的 PHP 和 Web 服务器环境,以及 Composer(PHP 的依赖管理工具)。首先,通过 Composer 安装并初始化...
9. **单元测试和行为驱动开发**:集成PHPUnit,支持自动化的单元测试,以及通过Behat进行行为驱动开发。 10. **强大的表单处理**:提供了表单验证和处理的功能,可以便捷地创建和管理用户输入。 中文文档中会详细...
7. **自动化测试**:Yii2提供了全面的测试支持,包括单元测试、功能测试和验收测试,帮助开发者确保代码质量。 8. **命令行工具**:Gii是一个内置的代码生成器,可以自动生成模型、控制器、视图以及CRUD操作,大大...
10. **测试**:Yii 支持单元测试和验收测试,项目通常包含一个 `tests` 目录,用于编写和运行测试用例。 11. **公共资源**:静态文件如 CSS、JavaScript 和图片通常存储在 `frontend/web/assets` 和 `backend/web/...
此外,框架内置的单元测试和集成测试支持有助于确保代码质量。 总的来说,"yii-advanced-app-2.0.11.tgz" 提供了一个强大的起点,让开发者能够高效地构建复杂且可维护的PHP Web应用。通过理解框架的结构和组件,...
7. 自动化测试:支持单元测试、功能测试和验收测试,确保代码质量。 解压“yii-basic-app-2.0.32.tgz”后,你会得到一个名为“basic”的目录,其中包含以下关键文件和目录: 1. composer.json:定义项目依赖和配置...
7. 自动化测试:Yii支持单元测试、集成测试和行为驱动开发(BDD),帮助开发者确保代码质量。 8. RESTful API支持:Yii框架很好地支持RESTful Web服务,方便构建面向服务的架构(SOA)。 9. 命令行工具:yiic是Yii...
4. **测试**: 利用Yii的测试框架如Codeception进行单元测试和集成测试,确保功能正常。 5. **部署**: 配置好生产环境,将代码部署到服务器,注意调整好生产环境的配置。 了解这些知识点后,你可以开始使用这个...
5. **测试**:使用`tests`目录下的代码进行单元测试和集成测试,确保功能正常。 Yii2的高级应用程序模板提供了一个专业且可扩展的起点,让开发者可以专注于业务逻辑,而非基础架构的搭建。无论是初创项目还是大型...
12. **单元测试和集成测试**:Yii 2.0 提供了对PHPUnit的支持,便于进行单元测试和集成测试,确保代码质量。 13. **组件化设计**:所有功能都封装为可复用的组件,使得扩展和定制变得容易。 14. **命令行工具**:...
7. **单元测试和调试**:框架内置了PHPUnit测试支持,并提供了调试工具如Profiler和Debug Toolbar,有助于开发过程中的质量保证和问题定位。 接下来,压缩包中的"yii-docs-2.0-en"包含了以下内容: 1. **入门指南*...
最后,通过编写单元测试和集成测试,确保扩展功能的稳定性和可靠性。 总之,"yii2-file-upload-master.zip"是一个为Yii2.0框架量身定制的图片上传解决方案,它提供了异步加载缩略图的能力,增强了用户体验,同时也...
10. **测试**:"tests"目录包含了单元测试和功能测试的框架,如PHPUnit,帮助确保代码的质量和功能的正确性。 要开始使用这个模板,首先确保你已经安装了PHP和Composer。然后,在服务器根目录解压文件,通过...
12. **测试支持**:Yii提供了PHPUnit集成,便于进行单元测试、功能测试和验收测试。 压缩包中的文件"yii-docs-1.1.8.r3324"很可能是Yii 1.1.8版本的官方文档,包含了详细的API参考、教程和最佳实践。通过阅读这些...
标题中的"up_935310_yii-user-management_ncmz6.rar"似乎是一个压缩包文件的名称,暗示了这是一个与Yii框架用户管理相关的...此外,如果项目包含单元测试(unit tests),还可以学习到测试驱动开发(TDD)的最佳实践。
4. 自动化测试:Yii 支持单元测试和功能测试,提供 Codeception 测试框架集成,帮助开发者确保代码质量并进行回归测试。 5. 缓存机制:为了提高性能,Yii 提供了多种缓存策略,包括文件缓存、内存缓存(如 APC、...
12. **单元测试和调试**:Yii2 提供了PHPUnit集成,便于进行单元测试。同时,Yii Debug Toolbar 和 Debugger 工具能够帮助开发者定位和解决错误。 通过深入学习"yii2-zh-cn-master"中的内容,开发者不仅能掌握 Yii2...
4. **示例或测试**:可能有 `tests` 目录,包含了 RBAC 功能的单元测试或者示例用例。 5. **文档**:README 或其他文档文件,解释如何安装、配置和使用这个 RBAC 解决方案。 在实际使用中,开发者需要按照 README ...
Yii 是一款高性能的PHP框架,它支持快速开发Web应用程序,并且提供了丰富的功能和工具,包括模型-视图-控制器(MVC)架构、数据库访问对象(DAO)、ActiveRecord模式、缓存策略、单元测试等。RESTful API 设计原则则...