狠狠撸

狠狠撸Share a Scribd company logo
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 (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)
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 automation
kuozui
?
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 1
netdbncku
?
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 formal
jameslabs
?
twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質
twMVC
?
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7
twMVC
?
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
twMVC
?
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.X
Bo-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#18 | 專案分層架構
twMVC
?
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
twMVC
?
Unit test
Unit testUnit test
Unit test
vul3yo6
?
Android JNI
Android JNIAndroid JNI
Android JNI
艾鍗科技
?
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
Rick Hwang
?
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 automation
kuozui
?
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 1
netdbncku
?
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 formal
jameslabs
?
twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質
twMVC
?
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7
twMVC
?
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
twMVC
?
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.X
Bo-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#18 | 專案分層架構
twMVC
?
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
twMVC
?
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
Rick Hwang
?

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

  • #2: 10/15/2012 Copyright ? 2012 by CHENJINLONG