[Wikipedia ](http://en.wikipedia.org/wiki/Test-driven_development)上的定義: > 測試驅動開發 (TDD) 是一種以非常短的開發周期不斷迭代的軟件開發過程:首先開發者對將要實現的功能或者新的方法寫一個失敗的自動化測試用例,然后就去寫代碼來通過這個測試用例,最終通過重構代碼讓一其達到可接受的水準。Kent Beck, 這個技術創造者或者說重新發現者,在2003年聲明TDD 鼓勵簡單的設計和激勵信心。
目前你可以應用的幾種不同類型的測試:
### 單元測試
單元測試是一種編程方法來確認函數,類和方法以我們預期的方式來工作,單元測試會貫穿整個項目的開發周期。通過檢查各個函數和方法的輸入輸出,你就可以保證內部的邏輯已經正確執行。通過使用依賴注入和編寫”mock” 類以及 stubs 來確認依賴被正確的使用,提高測試覆蓋率。
當你創建一個類或者一個函數,你應該為它們的每一個行為創建一個單元測試。至少你應該確認當你輸入一個錯誤參數會觸發一個錯誤,你輸入一個有效的參數會得到正確的結果。這會幫助你在開發周期后段對類或者函數做出修改后,確認已有的功能任然可以正常的工作。可替代的方法是在源碼中使用 var_dump() ,但這種方法卻不能去構建一個或大或小的應用。
單元測試的其他用處是在給開源項目貢獻代碼時。如果你寫了一個測試證明代碼有bug,然后修復它,并且展示測試的過程,這樣補丁將會更容易被接受。如果你在維護一個項目,在處理 pull request 的時候可以將單元測試作為一個要求。
[PHPUnit ](https://phpunit.de/)是業界PHP應用開發單元測試框架的標準,但也有其他可選的框架:
* [atoum](https://github.com/atoum/atoum)
* [Enhance PHP](https://github.com/Enhance-PHP/Enhance-PHP)
* [PUnit](http://punit.smf.me.uk/)
* [SimpleTest](http://simpletest.org/)
### 集成測試
[Wikipedia](http://en.wikipedia.org/wiki/Test-driven_development) 上的定義: > 集成測試 (有時候稱為集成和測試,縮寫為 I&T)是把各個模塊組合在一起進行整體測試的軟件測試階段。它處于單元測試之后,驗收測試之前。集成測試將已經經過了單元測試的模塊做為輸入模塊,組合成一個整體,然后運行集成測試用例,然后輸出一個可以進行系統測試的系統。
許多相同的測試工具既可以運用到單元測試,也可以運用到集成測試。
### 功能性測試
有時候也被稱之為驗收測試,功能測試是通過使用工具來生成自動化的測試用例,然后在真實的系統上運行。而不是單元測試中簡單的驗證單個模塊的正確性和集成測試中驗證各個模塊間交互的正確性。這些工具會使用代表性的真實數據來模擬真實用戶的行為來驗證系統的正確性。
### 功能測試的工具
* [Selenium](http://docs.seleniumhq.org/)
* [Mink](http://mink.behat.org/en/latest/)
* [Codeception ](http://codeception.com/)是一個全棧的測試框架包括驗收性測試工具。
* [Storyplayer ](http://datasift.github.io/storyplayer/)是一個全棧的測試框架并且支持隨時創建和銷毀測試環境。
- 歡迎
- 入門指南
- 使用當前穩定版本
- 內置的WEB服務器
- Mac安裝
- Windows安裝
- 代碼風格指南
- 語言亮點
- 編程范式
- 命名空間
- PHP標準庫
- 命令行接口
- Xdebug
- 依賴管理
- Composer 與 Packagist
- PEAR
- 開發實踐
- 基礎知識
- 日期和時間
- 設計模式
- 使用UTF8編碼
- 依賴注入
- 基本概念
- 復雜的問題
- 容器
- 延伸閱讀
- 數據庫
- MYSQL 擴展
- PDO 擴展
- 數據庫交互
- 數據庫抽象層
- 使用模板
- 好處
- 原生PHP模板
- 編譯模板
- 延伸閱讀
- 錯誤與異常
- 錯誤
- 異常
- 安全
- Web應用程序安全
- 密碼哈希
- 數據過濾
- 配置文件
- 注冊全局變量
- 錯誤報告
- 測試
- 測試驅動開發
- 行為驅動開發
- 其他測試工具
- 服務器與部署
- Platform as a Service (PaaS)
- 虛擬或專用服務器
- 共享服務器
- 構建及部署應用
- 虛擬化
- Vagrant
- Docker
- 緩存
- Opcode緩存
- 對象緩存
- 文檔撰寫
- 資源
- 社區
- Credits