測試
為你的 PHP 程式碼撰寫自動化測試被認為是個最佳實踐,可以幫助你建立良好的 應用程式。 自動化測試是個偉大的工具,它能確保你的應用程式 在改變或增加新的功能時沒有壞掉,不應該被忽略。
PHP 有一些不同種類的測試工具 (或框架) 可以使用,它們使用不同的方法 - 但他們都試圖避免手動測試和大型 QA 團隊的需求,確保最近的變更不會破壞既有的功能。
測試驅動開發
出自 維基百科:
測試驅動開發 (TDD) 是個依賴不斷重複著非常短的開發週期來運作的軟體開發流程: 首先,開發者撰寫一個定義著期望的改善或是新函式的失敗自動測試案例,接著撰寫程式碼來使測試通過,並最終重構程式碼至可以接受的標準。 Kent Beck,被認為是開發或是 '重新發現' 這個技術的人,2003 年聲明 TDD 鼓勵了簡單的設計並提振了信心
你可以為你的應用程式做這一些不同種類的測試
單元測試
單元測試是個編程方法,用來確保函式、類別和方法如預期運作,從你建構它們開始持續到整個開發週期。 藉由檢查每個函式和方法的 輸入和輸出值,你可以確保內部邏輯正確地運作。 藉由使用依賴注入、建立 "mock" 類別和 stubs,你可以驗證相依關係已經正確地建立,來提高測試涵蓋率。
當你建立一個類別或函式,你應該為每一個它應該有的行為建立單元測試。 最基本你應該 確保如果你傳遞錯誤的參數給它會發生錯誤,也確保如果你傳遞合法的參數給它會正確運作。 在開發週期中,這能幫助確保當你之後修改這個類別或函式時,舊功能依然如預期運作。 唯一的替代方案是在 test.php 檔案裡面執行 var_dump(),但這沒有辦法建立一個應用程式 - 不論大的還是小的。
單元測試另外一個用處是在貢獻程式碼給開源專案的時候。 如果你可以寫個測試來展示功能壞掉 (就是失敗),然後修復它,並展示測試通過,修補程式更可能會被接受。 如果你執行一個接受 pull requests 的專案,你應該建議這是一個要求。
PHPUnit 是個為 PHP 應用程式寫單元測試的主流測試框架,但是還有一些其他選擇
整合測試
出自 維基百科:
整合測試 (有時稱作整合和測試,縮寫「I&T」) 是結合個別軟體模組作為一個組合進行測試的軟體測試階段。 它處於單元測試之後和驗證測試之前。 整合測試拿已經做過單元測試的輸入模組,把它們聚集成比較大的項目,應用整合測試計畫來測試這些比較大的項目,並交付輸出整合的系統用來系統測試。
因為使用許多同樣的原理,很多可以用來單元測試的工具也可以用來整合測試。
功能測試
有時也被稱為驗收測試,功能測試使用工具來建立自動化的 測試,並用真實的應用程式進行測試,而不只是驗證個別單元的程式碼運作正確或驗證個別單元可以跟其他單元正確地溝通。 這些工具通常使用真實的資料並模擬應用程式實際的使用者來測試。
功能測試工具
- Selenium
- Mink
- Codeception 是個包含驗收測試工具的全端測試框架
- Storyplayer 是個包含依照需求建立和破壞測試環境功能的全端測試框架
行為驅動開發
有兩種不同的行為驅動開發 (BDD): SpecBDD 和 StoryBDD。 SpecBDD 專注於程式碼技術上的行為,而 StoryBDD 專注於商業或功能的行為和互動。 這兩種 BDD 都有 PHP 的框架。
採用 StoryBDD 時,你撰寫人可以閱讀的故事來描述應用程式的行為。 接著這些故事 可以作為應用程式的實際測試案例執行。 使用在 PHP 應用程式的 StoryBDD 框架 是 Behat,它受到 Ruby 的 Cucumber 專案啟發並實作了 Gherkin DSL 來描述功能的行為。
採用 SpecBDD 時,你撰寫規格來描述實際的程式碼應該有什麼行為。 描述函式或方法應該有什麼行為,而不是測試函式或方法。 PHP 提供 PHPSpec 框架來達到這個目的。 這個框架受到 Ruby 的 RSpec 專案 啟發。
BDD 連結
- Behat,PHP 的 StoryBDD 框架,受到 Ruby 的 Cucumber 專案啟發。
- PHPSpec,PHP 的 SpecBDD 框架,受到 Ruby 的 RSpec 專案啟發。
- Codeception 是個使用 BDD 原則的全端測試框架。
其他測試工具
除了個別的測試驅動和行為驅動框架之外,還有一些通用的框架和輔助函式庫,對任何的測試方法都很有用。