• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHPUnit slide formal
 

PHPUnit slide formal

on

  • 568 views

 

Statistics

Views

Total Views
568
Views on SlideShare
568
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHPUnit slide formal PHPUnit slide formal Presentation Transcript

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