SlideShare a Scribd company logo
PHP 单元测试

PHPUnit介绍以及使用示例


蓝燕光
2012-7-25
软件测试
单元测试

功能测试

集成测试

性能测试

系统测试

验收测试

回归测试

。。。。。。
单元测试
定义:验证程序中类方法和函数执行后的预期结果

好处:尽早发现错误,修正BUG
   自动化测试,提高效率
   单元测试用例本身就是一个demo
   给代码重构提供保障
   给程序设计提供思考

缺点:浪费时间?
   太麻烦?

范围: TDD(Test-Driven Development) 测试驱动开发
   开发时测试,测试功能预期结果正确
   调试时测试,回归测试,验证缺陷是否可以重现

职责:单元测试是开发人员该做的事
PHPUnit
PHPUnit是PHP单元测试框架,由 SEBASTIAN BERGMANN 开发维护。
目前最新版本3.7,稳定版本3.6

官方网站:http://www.phpunit.de/manual/current/en/index.html
GitHub: https://github.com/sebastianbergmann/phpunit
伯格曼个人网站:http://sebastian-bergmann.de/
PHPUnit 安装
PHPUnit 基于PEAR(PHP Extension and Application Repository)安装

注意:
PHPUnit 3.6 需要PHP 5.2.7及以上版本,推荐PHP 5.3.9及以上版本。
PHPUnit 3.6 PHP_CodeCoverage 模块依赖 Xdebug 2.0.5 及以上版本,
推荐Xdebug 2.1.3 及以上版本。

1、升级PEAR包
  pear upgrade PEAR

2、安装PHPUnit
  pear config-set auto_discover 1
  pear install  pear.phpunit.de/PHPUnit
PHPUnit 约定
1、测试类以Test结尾,例如类Stack的测试类为StackTest

2、测试类继承PHPUnit_Framework_TestCase

3、测试是公共方法,并且以test*命名

4、使用assertEquals()断言方法进行测试
PHPUnit 示例
测试一个测试用例
phpunit -v StackTest.php
PHPUnit 特性
Assertions 断言
Annotations 注释
Data Providers 数据提供商
Fixtures 装载器
Test Doubles 隔离测试
Database Testing 数据库测试
Assertions 断言

assertEquals(mixed $expected, mixed $actual[, string
  $message = ''])



   期望值                   实际结果               测试失败抛出的信息
Annotations 注释
注释在PHPUnit里面是做特殊用途的,有时候可以做反向代码生成.

这里的注释是指在程序中除了描述之外的另外功能.
其他使用注释作为代码辅助的项目
phpDocumentor 2
Symfony 2
eZ Components
Doctrine 2

/**
 * @test
 */
public function initialBalanceShouldBe0()
{
    $this->assertEquals(0, $this->ba->getBalance());
}
Test Dependencies 依赖测试
Data Providers 数据提供商




1、provider 必须是 public方法
2、provider 的返回集应该是一个数组或者可迭代的对象
3、不要依赖使用 provider 的方法
4、provider 在 setUp 方法触发之前执行
Testing Exceptions 异常测试




           使用注释
Testing Exceptions 异常测试




        使用setExpectedException
Testing Exceptions 测试异常
Testing PHP Errors 测试错误
Testing Output 测试输出




expectOutputRegex(string $regularExpression)

void expectOutputString(string $expectedString)

bool setOutputCallback(callable $callback)
命令行测试



. 表示成功
F 表示测试失败
E 表示测试错误
S 表示测试被跳过
I 表示测试未完成
命令行测试
Fixtures 装载器
Fixtures 装载器
 setUp()        测试函数执行前重置执行
 tearDown()


 setUpBeforeClass()     测试类执行前后出发
 tearDownAfterClass()


 assertPreConditions() 断言前后,测试失败不触发
 assertPostConditions()
Incomplete Tests 未完成测试




void markTestIncomplete()
void markTestIncomplete(string $message
Skipping Tests 跳过测试




void markTestSkipped()
void markTestSkipped(string $message)
Skeleton Generator 测试生成




通过 phpunit-skelgen 命令
可以自动生成测试文件
Skeleton Generator 测试生成




通过注释可以直接生成测试断言
PHPUnit XML 配置
Netbeans & PHPUnit &
Xdebug
 Netbeans 支持PHPUnit 测试代码生成
  和测试。
 Xdebug 用于统计单元测试覆盖率
目录结构

More Related Content

PDF
Unit test
PPT
Duannian agile
PPTX
Unit test
PPTX
單元測試
ODP
PHPUnit
PDF
Foundation of software development 1
PDF
測試是什麼
PDF
TDD (Test-driven development, 測試驅動開發) 基本教學
Unit test
Duannian agile
Unit test
單元測試
PHPUnit
Foundation of software development 1
測試是什麼
TDD (Test-driven development, 測試驅動開發) 基本教學

What's hot (20)

PDF
Tip for Editors
PDF
Testing in Python @ Kaosiung.py 2014.05.26
PDF
認試軟體測試的世界 & TDD/BDD 入門
PPTX
單元測試介紹
PDF
前端单元测试
PPTX
持續整合與單元測試
PPS
测试快照
PPT
2012 China 软件测试大会
PDF
PPTX
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
PPT
The way to continuous delivery
PPT
Yii phpunit
PPTX
持续集成中的六步提交
PPTX
Static Code Analysis 靜態程式碼分析
PPT
图片管理Java迁移项目测试总结
PDF
service-oriented agile team-Q con-beijing2012
PPT
Phpunit入门 r2
PPT
关于敏捷测试思想的分享Cici 20110826
PPT
2014/02: 嵌入式測試驅動開發
PDF
TDD 介紹
Tip for Editors
Testing in Python @ Kaosiung.py 2014.05.26
認試軟體測試的世界 & TDD/BDD 入門
單元測試介紹
前端单元测试
持續整合與單元測試
测试快照
2012 China 软件测试大会
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
The way to continuous delivery
Yii phpunit
持续集成中的六步提交
Static Code Analysis 靜態程式碼分析
图片管理Java迁移项目测试总结
service-oriented agile team-Q con-beijing2012
Phpunit入门 r2
关于敏捷测试思想的分享Cici 20110826
2014/02: 嵌入式測試驅動開發
TDD 介紹
Ad

Viewers also liked (18)

PPTX
持续集成入门
PPTX
How effective is the combination of your main
DOCX
Contoh edit modul
PPTX
Evaluation of hybrid library marketing strategies
PPTX
The moderns
PPTX
A gift of a friend
PPTX
Mike hansen theory
PPTX
Advor profile
PDF
Organizac 120417231150-phpapp01
PPTX
PDF
Organizac 120417231150-phpapp01
PPS
autoimmune diseases in pregnancy
PDF
Protein structure
PPTX
Chapter 2 genpsych
PDF
Botany an overview
PDF
RSpec 讓你愛上寫測試
PDF
Agile meetup - user story mapping workshop
PDF
Protein synthesis
持续集成入门
How effective is the combination of your main
Contoh edit modul
Evaluation of hybrid library marketing strategies
The moderns
A gift of a friend
Mike hansen theory
Advor profile
Organizac 120417231150-phpapp01
Organizac 120417231150-phpapp01
autoimmune diseases in pregnancy
Protein structure
Chapter 2 genpsych
Botany an overview
RSpec 讓你愛上寫測試
Agile meetup - user story mapping workshop
Protein synthesis
Ad

PHP 单元测试