SlideShare a Scribd company logo
1 of 27
15 分钟入门 PHPUnit
             Tips:
             每版内容针对初学者精心设计,作者连续 2 小时打造的
             精品幻灯片, 15 分钟轻松阅读学习,带你彻底了解
             PHPUnit 的前世今生。




10/15/2012           Copyright © 2012 by CHENJINLONG   1
今天你们会听到些什么?

             1. 绿色环保的测试过程

             2. 测试的分类

             3. 单元测试周期

             4. PHPUnit 入门

             5. 说说 Selenium

             6. Yii && UnitTest




10/15/2012                        Copyright © 2012 by CHENJINLONG   2
• 我们为什么要矢志不渝地去主动邂逅


             PHPUnit ?


10/15/2012    Copyright © 2012 by CHENJINLONG   3
绿色环保的测试过程
• 在开发应用程序的时候,我们会发现我们
  其实无法离开测试,就像
  【地球离不开太阳,】
  【寒梅离不开风霜。】
• 常规的绿色测试:
  1. 程序体注入 echo 、 die 、 print 语句
  2. 人员意志输入功能数据测试预期结果


10/15/2012     Copyright © 2012 by CHENJINLONG   4
测试的分类
• 单元测试
  焦点:代码独立单元
  效果:单元运行与预期一致
• 集成测试
  焦点:软件单位间的交互
  效果:软件单位之间接口是否正确
• 功能测试
  焦点: SRS
  效果:是否符合用户要求的预期
• …
10/15/2012   Copyright © 2012 by CHENJINLONG   5
TDD 生命周期
• 测试驱动开发 (TDD) 的开发周期 :
• 1. 创建一个涵盖要实现的特性的新的测试 . 测试预
  计将在第一次执行的时候失败 , 因为特性尚未实现 .
• 2. 执行所有测试 , 确保这个新的测试是失败的 .
• 3. 编写代码来使得测试通过 .
• 4. 执行所有测试 , 确保所有测试通过 .
• 5. 重构新编写的代码并确保这些测试仍然能够通过
  .

• 重复步骤 1 至 5 推进整体功能的实现 .

10/15/2012    Copyright © 2012 by CHENJINLONG   6
PHPUnit 入门
• PHPUnit 安装
1. 进入 php 目录, pear version 查看 pear 版本,若版
   本低于 1.7.x 或更低,则需要进行升级;
2. 下载 http://pear.php.net/go-pear.pear 文件拷贝至
   php 目录,执行 php go-pear.pear 更新 pear 版本;
3. 按提示操作并回车,当看到 Double-click this file to
   add it to the current user registry. 时,双击 php 目录
   下的 PEAR_ENV.reg 将其添加进注册表;
4. 输入 phpunit 回车可看到 phpunit 版本信息,表示已
   经安装成功。
以上步骤在不同的 AMP 套件的操作可能有异同,需要
   视情况而定。
10/15/2012        Copyright © 2012 by CHENJINLONG   7
一起来看看常规的测试示例




             难道就这么简单而已?当然不是!

10/15/2012        Copyright © 2012 by CHENJINLONG   8
PHPUnit 样例




10/15/2012    Copyright © 2012 by CHENJINLONG   9
什么时候才适合书写测试类呢?
• 只要你想到输入一些东西到 print 语句或调
  试表达式中,就用测试代替它。
                --Martin Fowler




10/15/2012   Copyright © 2012 by CHENJINLONG   10
书写测试类基本步骤
• 1. 将类 Class 的测试写入类 ClassTest 。
• 2. ClassTest 继承(通常)自
  PHPUnit_Framework_TestCase 。
• 3. 测试都是公用方法,命名为 test* 。
  另外,你可以在方法的文档注释块
  ( docBlock )中使用 @test 注解来把它标记为
  测试方法。
• 4. 在测试方法中,类似 assertEquals() 的断言
  方法用来断言一个实际值(应该)匹配一个期
  望值。
10/15/2012     Copyright © 2012 by CHENJINLONG   11
PHPUnit 仅限测试一组数据?弱爆了
• 当然不是!
• PHPUnit 具备了数据提供者这一概念,数据
  提供者方法必须是 public 和 static 的,其返
  回值必须是一个数组,或者是继承了迭代
  接口的对象。
• 提示,别忘了在测试方法的 docBlock 上添
  加 @dataProvider xxx


10/15/2012   Copyright © 2012 by CHENJINLONG   12
数据提供者




10/15/2012   Copyright © 2012 by CHENJINLONG   13
迭代对象




10/15/2012   Copyright © 2012 by CHENJINLONG   14
测试异常




10/15/2012   Copyright © 2012 by CHENJINLONG   15
• 编写测试的一个最耗时部分是编写代码设
  置场景为已知状态以及在测试完成时将其
  还原为初始状态。这个已知状态称为测试
  的 fixture 。
• PHPUnit 支持共享装配代码,包括单体类测
  试以及套件级测试,这里将认识两个模版
  方法 setUp() 和 tearDown() 。


10/15/2012   Copyright © 2012 by CHENJINLONG   16
下面的用法正确么?




10/15/2012     Copyright © 2012 by CHENJINLONG   17
何为测试套件?




10/15/2012    Copyright © 2012 by CHENJINLONG   18
测试用例扩展
• 期望值输出
  PHPUnit_Extensions_OutputTestCase
• 性能测试
  PHPUnit_Extensions_PerformanceTestCase
• 数据库测试
  PHPUnit_Extensions_Database_TestCase
• …


10/15/2012     Copyright © 2012 by CHENJINLONG   19
有一些无法测试的类怎么办?
• markTestSkipped(string $msg)

• markTestIncomplete(string $message)




10/15/2012      Copyright © 2012 by CHENJINLONG   20
Mocking 技术




10/15/2012    Copyright © 2012 by CHENJINLONG   21
代码覆盖率
• PHPUnit 的代码覆盖率分析利用 Xdebug 扩展提
  供的语句覆盖率功能 .
• 可以在测试方法上添加 docBlock




• 或者是使用 @codeCoverageIgnoreStart 和
  @codeCoverageIgnoreEnd 注解不需要统计的代
  码块

10/15/2012   Copyright © 2012 by CHENJINLONG   22
说说 Selenium
• 一个 Band 0 级的 HelloWorld 例子




10/15/2012    Copyright © 2012 by CHENJINLONG   23
Selenium
• Selenium RC API
  Selenium RC 所提供的接口函数




• PHPUnit_Extensions_SeleniumTestCase
  测试用例扩展将同 Selenium RC 通话的 C/S
  协议实现为专门用于 web 测试的断言方法
  。
10/15/2012   Copyright © 2012 by CHENJINLONG   24
Selenium
• 测试用例类中声明一个名为 $browsers 的
  public static 数组代替使用 setBrowser() 设置
  一个浏览器。该数组中的每一项都描述一
  个浏览器配置。




10/15/2012   Copyright © 2012 by CHENJINLONG   25
Yii && UnitTest
• 详细可查看项目中的代码, Yii 中的
  PHPUnit 可谓是真正的披着马甲的 PHP 高效
  框架。
• Yii 框架既定 PHPUnit 文件结构:




10/15/2012     Copyright © 2012 by CHENJINLONG   26
• Thanks




10/15/2012   Copyright © 2012 by CHENJINLONG   27

More Related Content

Similar to Yii phpunit

Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Chen Cheng-Wei
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
Web testing automation
Web testing automationWeb testing automation
Web testing automationkuozui
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Bill Lin
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC
 
110年度晶片設計e learning課程公告 第七梯次
110年度晶片設計e learning課程公告 第七梯次110年度晶片設計e learning課程公告 第七梯次
110年度晶片設計e learning課程公告 第七梯次ssuser6336aa
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 
twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC
 
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7twMVC
 
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12twMVC
 
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.XBo-Yi Wu
 
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)Poy Chang
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18twMVC
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC
 
Unit test
Unit testUnit test
Unit testvul3yo6
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)Rick Hwang
 

Similar to Yii phpunit (20)

Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
Ansible & GitLab CI / CD Workshop 101 ( @Agile Tour Taipei 2017)
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
Web testing automation
Web testing automationWeb testing automation
Web testing automation
 
Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發
 
110年度晶片設計e learning課程公告 第七梯次
110年度晶片設計e learning課程公告 第七梯次110年度晶片設計e learning課程公告 第七梯次
110年度晶片設計e learning課程公告 第七梯次
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 
twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質
 
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7
 
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
 
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.X
 
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
 
單元測試
單元測試單元測試
單元測試
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構
 
Unit test
Unit testUnit test
Unit test
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
 

Yii phpunit

  • 1. 15 分钟入门 PHPUnit Tips: 每版内容针对初学者精心设计,作者连续 2 小时打造的 精品幻灯片, 15 分钟轻松阅读学习,带你彻底了解 PHPUnit 的前世今生。 10/15/2012 Copyright © 2012 by CHENJINLONG 1
  • 2. 今天你们会听到些什么? 1. 绿色环保的测试过程 2. 测试的分类 3. 单元测试周期 4. PHPUnit 入门 5. 说说 Selenium 6. Yii && UnitTest 10/15/2012 Copyright © 2012 by CHENJINLONG 2
  • 3. • 我们为什么要矢志不渝地去主动邂逅 PHPUnit ? 10/15/2012 Copyright © 2012 by CHENJINLONG 3
  • 4. 绿色环保的测试过程 • 在开发应用程序的时候,我们会发现我们 其实无法离开测试,就像 【地球离不开太阳,】 【寒梅离不开风霜。】 • 常规的绿色测试: 1. 程序体注入 echo 、 die 、 print 语句 2. 人员意志输入功能数据测试预期结果 10/15/2012 Copyright © 2012 by CHENJINLONG 4
  • 5. 测试的分类 • 单元测试 焦点:代码独立单元 效果:单元运行与预期一致 • 集成测试 焦点:软件单位间的交互 效果:软件单位之间接口是否正确 • 功能测试 焦点: SRS 效果:是否符合用户要求的预期 • … 10/15/2012 Copyright © 2012 by CHENJINLONG 5
  • 6. TDD 生命周期 • 测试驱动开发 (TDD) 的开发周期 : • 1. 创建一个涵盖要实现的特性的新的测试 . 测试预 计将在第一次执行的时候失败 , 因为特性尚未实现 . • 2. 执行所有测试 , 确保这个新的测试是失败的 . • 3. 编写代码来使得测试通过 . • 4. 执行所有测试 , 确保所有测试通过 . • 5. 重构新编写的代码并确保这些测试仍然能够通过 . • 重复步骤 1 至 5 推进整体功能的实现 . 10/15/2012 Copyright © 2012 by CHENJINLONG 6
  • 7. PHPUnit 入门 • PHPUnit 安装 1. 进入 php 目录, pear version 查看 pear 版本,若版 本低于 1.7.x 或更低,则需要进行升级; 2. 下载 http://pear.php.net/go-pear.pear 文件拷贝至 php 目录,执行 php go-pear.pear 更新 pear 版本; 3. 按提示操作并回车,当看到 Double-click this file to add it to the current user registry. 时,双击 php 目录 下的 PEAR_ENV.reg 将其添加进注册表; 4. 输入 phpunit 回车可看到 phpunit 版本信息,表示已 经安装成功。 以上步骤在不同的 AMP 套件的操作可能有异同,需要 视情况而定。 10/15/2012 Copyright © 2012 by CHENJINLONG 7
  • 8. 一起来看看常规的测试示例 难道就这么简单而已?当然不是! 10/15/2012 Copyright © 2012 by CHENJINLONG 8
  • 9. PHPUnit 样例 10/15/2012 Copyright © 2012 by CHENJINLONG 9
  • 10. 什么时候才适合书写测试类呢? • 只要你想到输入一些东西到 print 语句或调 试表达式中,就用测试代替它。 --Martin Fowler 10/15/2012 Copyright © 2012 by CHENJINLONG 10
  • 11. 书写测试类基本步骤 • 1. 将类 Class 的测试写入类 ClassTest 。 • 2. ClassTest 继承(通常)自 PHPUnit_Framework_TestCase 。 • 3. 测试都是公用方法,命名为 test* 。 另外,你可以在方法的文档注释块 ( docBlock )中使用 @test 注解来把它标记为 测试方法。 • 4. 在测试方法中,类似 assertEquals() 的断言 方法用来断言一个实际值(应该)匹配一个期 望值。 10/15/2012 Copyright © 2012 by CHENJINLONG 11
  • 12. PHPUnit 仅限测试一组数据?弱爆了 • 当然不是! • PHPUnit 具备了数据提供者这一概念,数据 提供者方法必须是 public 和 static 的,其返 回值必须是一个数组,或者是继承了迭代 接口的对象。 • 提示,别忘了在测试方法的 docBlock 上添 加 @dataProvider xxx 10/15/2012 Copyright © 2012 by CHENJINLONG 12
  • 13. 数据提供者 10/15/2012 Copyright © 2012 by CHENJINLONG 13
  • 14. 迭代对象 10/15/2012 Copyright © 2012 by CHENJINLONG 14
  • 15. 测试异常 10/15/2012 Copyright © 2012 by CHENJINLONG 15
  • 16. • 编写测试的一个最耗时部分是编写代码设 置场景为已知状态以及在测试完成时将其 还原为初始状态。这个已知状态称为测试 的 fixture 。 • PHPUnit 支持共享装配代码,包括单体类测 试以及套件级测试,这里将认识两个模版 方法 setUp() 和 tearDown() 。 10/15/2012 Copyright © 2012 by CHENJINLONG 16
  • 17. 下面的用法正确么? 10/15/2012 Copyright © 2012 by CHENJINLONG 17
  • 18. 何为测试套件? 10/15/2012 Copyright © 2012 by CHENJINLONG 18
  • 19. 测试用例扩展 • 期望值输出 PHPUnit_Extensions_OutputTestCase • 性能测试 PHPUnit_Extensions_PerformanceTestCase • 数据库测试 PHPUnit_Extensions_Database_TestCase • … 10/15/2012 Copyright © 2012 by CHENJINLONG 19
  • 20. 有一些无法测试的类怎么办? • markTestSkipped(string $msg) • markTestIncomplete(string $message) 10/15/2012 Copyright © 2012 by CHENJINLONG 20
  • 21. Mocking 技术 10/15/2012 Copyright © 2012 by CHENJINLONG 21
  • 22. 代码覆盖率 • PHPUnit 的代码覆盖率分析利用 Xdebug 扩展提 供的语句覆盖率功能 . • 可以在测试方法上添加 docBlock • 或者是使用 @codeCoverageIgnoreStart 和 @codeCoverageIgnoreEnd 注解不需要统计的代 码块 10/15/2012 Copyright © 2012 by CHENJINLONG 22
  • 23. 说说 Selenium • 一个 Band 0 级的 HelloWorld 例子 10/15/2012 Copyright © 2012 by CHENJINLONG 23
  • 24. Selenium • Selenium RC API Selenium RC 所提供的接口函数 • PHPUnit_Extensions_SeleniumTestCase 测试用例扩展将同 Selenium RC 通话的 C/S 协议实现为专门用于 web 测试的断言方法 。 10/15/2012 Copyright © 2012 by CHENJINLONG 24
  • 25. Selenium • 测试用例类中声明一个名为 $browsers 的 public static 数组代替使用 setBrowser() 设置 一个浏览器。该数组中的每一项都描述一 个浏览器配置。 10/15/2012 Copyright © 2012 by CHENJINLONG 25
  • 26. Yii && UnitTest • 详细可查看项目中的代码, Yii 中的 PHPUnit 可谓是真正的披着马甲的 PHP 高效 框架。 • Yii 框架既定 PHPUnit 文件结构: 10/15/2012 Copyright © 2012 by CHENJINLONG 26
  • 27. • Thanks 10/15/2012 Copyright © 2012 by CHENJINLONG 27

Editor's Notes

  1. 10/15/2012 Copyright © 2012 by CHENJINLONG