PHPUnit

860 views

Published on

PHPUnit basics

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
860
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

PHPUnit

  1. 1. PHPUnit 入門 v1.0
  2. 2. 軟體開發流程 分析 設計 實作 測試 維護
  3. 3. 軟體由多種物件組成汽車由多種零件組成 似曾相識 又 環環相扣
  4. 4. IEEE ( 電機電子工程師學會 ) - SWEBOK (Software Engineering Body of Knowledge) 依軟體測試 (Software testing) 層級區分六種測試
  5. 5. 1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  6. 6. 1. 單元測試 (Unit testing)
  7. 7. 程式語言裡 , 單元測試是由專案程式碼各個區塊受測試是否可使用的方法 , 它也是軟體測試最小單位In computer programming, unit testing is a method bywhich individual units of source code are tested todetermine if they are fit for use. A unit is smallest testablepart of an application. - Wiki
  8. 8. 1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  9. 9. 2. 整合測試 (Integration testing)
  10. 10. 1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  11. 11. 3. 系統測試 (System testing)
  12. 12. 1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  13. 13. 4. 系統整合測試 (System integrationtesting)
  14. 14. 1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  15. 15. 5. 由下而上測試 (Bottom Uptesting)6. 由上而下測試 (Top Down testing)
  16. 16. Google API 架構示意圖
  17. 17. 是 否 曾 經 遇 過 如 下 情 況 :1. 接過複雜的大型專案2. 對自己維護的專案,極度沒信心3. 在專案完成時,常做噩夢,怕隔天出現任何 差錯4. 時常加班或利用周末休息時間,找程式蟲蟲
  18. 18. 撰寫測試程式是件不容易的事但寫出良好的測試程式需更用心
  19. 19. 但學習撰寫測試是非常值得投資 :1 、微軟及 IBM 研究報告顯示,可能會增加開發時間 15% ~ 35 % ,但是可減少蟲蟲數 40% ~ 90% ( 註 1) 。2 、寫程式時,應考慮易於寫測試程式原則。3 、單元測試程式可以開發程式時順利而不會痛苦。4 、我們不想在美好的假日或優閒的下班時間 , 被蟲蟲給吸光 , 明明只是簡單改了一行程式碼,為什麼程式卻壞了。( 註 1)http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
  20. 20. 接下來就歡迎今天的主角 Mr. PHPUnit
  21. 21. Mr. PHPUnit 自我介紹即使是一個優秀的程式設計師都會犯錯,但是優秀的程式員會利用測試盡可能找出錯誤,花多點時間寫出測試程式,就越容易找出蟲蟲,程式錯誤無法全部找出,但是藉由測試程式,盡可能找出有問題的程式。使用 PHPUnit 可能和你一般使用的測試方式有些部分類似 , 不同的是會測試是否和你預期的一樣,有效率自動執行程式你想測試的程式片段。
  22. 22. PHPUnit 身家背景1. PHPUnit 是 PHP 的測試框架 , 作者是 Sebastian Bergman2. 它是 xUnit 測試框架家族3. PHPUnit 已經成為測試業界標準4. 被知名的 PHP 框架所使用 , 例如 : Zend Framework Symphony CakePHP Doctrine
  23. 23. xUnit 簡介1. 單元測試2. 自動化測試3. 源於 Smalltalk 的 SUnit, 由 Kent Beck 移植架構 , 使用 Java寫成 JUnit, 承襲此架構其他語言相繼出現 , 例如 :(1) C++ 的 CppUnit(2) PHP 的 PHPUnit(3) JavaScript 的 JsUnit, YUI Test, QunitJsUnit (2001 ~ 2009) 目前已停止開發維護 , 它是 JS 語言第一個出現的測試套件Qunit 是 jQuery 作者開發 , 後由社群維護 , 遵循CommonJS Unit Testing 規範
  24. 24. 測試導向開發 (Test-driven development)
  25. 25. 如何安裝 PHPUnit
  26. 26. 安裝需求PHPUnit 3.6- PHP 5.2.7+ 最低- PHP 5.3.9+ 建議配件 : PHP_CodeCoverage- Xdebug 2.0.5+ 最低- Xdebug 2.1.3+ 建議PHPUnit 3.7- PHP 5.3.3+ 最低- PHP 5.4.0+ 建議配件 : PHP_CodeCoverage- Xdebug 2.0.5+ 最低- Xdebug 2.2.0+ 建議
  27. 27. 命令列執行pear config-set auto_discover 1pear install pear.phpunit.de/PHPUnit
  28. 28. 撰寫基本的測試程式檔案 StackTest.php1 require_once PHPUnit/Autoload.php23 class StackTest extends PHPUnit_Framework_TestCase4 {5 public function testEmpty()6 {7 $stack = array();8 $this->assertEmpty($stack);9 }10 }1112 1. 檔案名稱結尾加 Test13 2. 類別名稱結尾加 Test14 3. 類別繼承 PHPUnit_Framework_TestCase15 4. 類別方法名稱開頭加 test, 存取範圍設定成 public16 5. 類別裡至少要有一個 test 開頭的方法 , 否則測試會顯示失敗17 6. 類別方法裡至少要有一個 assert 方法被呼叫 , 否則會顯示未完成或省略18
  29. 29. 測試資料準備 (Test Fixtures)檔案 StackTest.php1 require_once PHPUnit/Autoload.php23 class StackTest extends PHPUnit_Framework_TestCase4 {5 protected $stack;67 protected function setUp()8 {9 $this->stack = array();10 }1112 public function testEmpty()13 {14 $this->assertTrue(empty($this->stack));15 }16 }1. 經由 setUp 或 tearDown 方法 , 可在測試前設置所需資料2. setUp 在執行測試前呼叫 , tearDown 則在之後被呼叫3. 藉由這兩種方法 , 可以從是檔案或者網路相關測試4. 另外 setUpBeforeClass 和 tearDownAfterClass 個別在執行 test 方法前後被呼叫5. 執行順序 setUp => setUpBeforeClass => test* => tearDownAfterClass => tearDown
  30. 30. Mock 物件PHPUnit 一項重大功能
  31. 31. 什麼是 Mock 物件 ?!1. 它是測試類別的依賴類別的替代品2. 取代依賴呼叫方法 , 讓執行測試時暢行無阻3. 正確使用它 , 可以正確模擬原有依賴類別特性4. 隔離依賴類別 , 可以幫助你判斷是否目前測試類別錯誤5. 使用 mock 物件方法稱為 Dependency Injection (DI)
  32. 32. Mock 物件實做class SomeClass{ public function doSomething() { // Do something. }}class StubTest extends PHPUnit_Framework_TestCase{ public function testStub() { $stub = $this->getMock(SomeClass); $stub->expects($this->any()) ->method(doSomething) ->will($this->returnValue(foo)); $this->assertEquals(foo, $stub->doSomething()); }}
  33. 33. Mock 物件其它使用1. 可使用 getMockForAbstractClass() 方法測試抽象類別2. 可使用 getMockFromWsdl() 方法模擬 SOAP 網路服務3. PHPUnit 支援檔案系統模擬 , 需安裝 vfsStream 套件 , 目前仍為測試版
  34. 34. 命令列執行測試1. 直接輸入 PHPUnit 不加任何參數則返回說明訊息2. 當測試某個檔案時 , 參數輸入檔案名稱 , 即可執行測試3. 當測試整個目錄時 , 參數輸入目錄路徑 , PHPUnit 會依提供目錄路徑遞迴方式一層一層搜尋檔案執行4. PHPUnit 執行測試後 , 成功時會印出『 . 』 ,失敗時會印出 F, 未完成時會印出 I, 省略跳過則會印出 S5. 還會顯示執行秒數 , 使用記憶體大小 , 測試了多少方法

×