PHPUnit slide formal

784 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PHPUnit slide formal

  1. 1. PHPUnit
  2. 2. 依據 SWEBOK (Software Engineering Body of Knowledge)所定義軟體測試 (Software testing), 依測試層級區分五個種類 :1. 單元測試 (Unit testing)2. 整合測試 (Integration testing)3. 系統測試 (System testing)4. 系統整合測試 (System integration testing)5. 由下而上測試 (Bottom Up testing)6. 由上而下測試 (Top Down testing)
  3. 3. 什 麼 是 單 元 測 試 ?!
  4. 4. Q : 什 麼 是 單 元 測 試 ?!A:程式語言裡 , 單元測試是由專案程式碼各個區塊受測試是否可使用的方法 , 它也是軟體測試最小單位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
  5. 5. 是 否 曾 經 遇 過 如 下 情 況 :1. 接過維護的專案程式是大家驚恐的2. 害怕修改專案程式後 , 出現不祥預感3. 在專案終於完成 , 常常前一晚做噩夢 , 怕隔天又出現任何差錯4. 時常加班或利用周末休息時間 , 找程式蟲蟲
  6. 6. 撰寫測試程式是件不容易的事但寫出良好的測試程式更難
  7. 7. 但學習撰寫測試是非常值得投資 :1. 微軟及 IBM 研究報告顯示 , 可能會增加開發時間15% ~ 35 %, 但是可減少蟲蟲數 40% ~ 90%2. 寫程式時 , 應考慮易於寫測試程式原則3. 單元測試程式可以開發程式時順利而不會痛苦4. 我們不想在美好的假日或優閒的下班時間 , 被蟲蟲給吸光 ,明明只是簡單改了一行程式碼 , 為什麼程式卻壞了
  8. 8. 接下來就歡迎今天的主角 Mr. PHPUnit
  9. 9. Mr. PHPUnit 自我介紹即使是一個優秀的程式設計師都會犯錯 , 但是優秀的程式員會利用測試盡可能找出錯誤 , 花多點時間寫出測試程式 , 就越容易找出蟲蟲 , 程式錯誤無法全部找出 , 但是藉由測試程式 , 盡可能找出有問題的程式 .使用 PHPUnit 可能和你一般使用的測試方式有些部分類似 , 不同的是會測試是否和你預期的一樣 , 有效率自動執行程式你想測試的程式片段
  10. 10. PHPUnit 身家背景1. PHPUnit 是 PHP 的測試框架 , 作者是 Sebastian Bergman2. 它是 xUnit 測試框架家族3. PHPUnit 已經成為測試業界標準 , 和它同期的有 SimpleTest和 Atoum4. 被知名的 PHP 框架所使用 , 例如 : Zend Framework,Symphony, CakePHP 及其它大型專案 Doctrine
  11. 11. 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 規範
  12. 12. 如何安裝 PHPUnit
  13. 13. 安裝需求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+ 建議
  14. 14. 命令列執行pear config-set auto_discover 1pear install pear.phpunit.de/PHPUnit
  15. 15. 撰寫基本的測試程式檔案 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
  16. 16. 測試資料準備 (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
  17. 17. Mock 物件PHPUnit 一項重大功能
  18. 18. 什麼是 Mock 物件 ?!1. 它是測試類別的依賴類別的替代品2. 取代依賴呼叫方法 , 讓執行測試時暢行無阻3. 正確使用它 , 可以正確模擬原有依賴類別特性4. 隔離依賴類別 , 可以幫助你判斷是否目前測試類別錯誤5. 使用 mock 物件方法稱為 Dependency Injection (DI)
  19. 19. 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()); }}
  20. 20. Mock 物件其它使用1. 可使用 getMockForAbstractClass() 方法測試抽象類別2. 可使用 getMockFromWsdl() 方法模擬 SOAP 網路服務3. PHPUnit 支援檔案系統模擬 , 需安裝 vfsStream 套件 , 目前仍為測試版
  21. 21. 命令列執行測試1. 直接輸入 PHPUnit 不加任何參數則返回說明訊息2. 當測試某個檔案時 , 參數輸入檔案名稱 , 即可執行測試3. 當測試整個目錄時 , 參數輸入目錄路徑 , PHPUnit 會依提供目錄路徑遞迴方式一層一層搜尋檔案執行4. PHPUnit 執行測試後 , 成功時會印出『 . 』 ,失敗時會印出 F, 未完成時會印出 I, 省略跳過則會印出 S5. 還會顯示執行秒數 , 使用記憶體大小 , 測試了多少方法

×