鍍金池/ 教程/ PHP/ 測(cè)試
依賴管理
安全
測(cè)試
使用模板
開發(fā)實(shí)踐
入門指南
服務(wù)器與部署
社區(qū)
語言亮點(diǎn)
錯(cuò)誤與異常
虛擬化技術(shù)
資源
文檔撰寫
數(shù)據(jù)庫
依賴注入
緩存
代碼風(fēng)格指南

測(cè)試

為你的 PHP 程序編寫自動(dòng)化測(cè)試被認(rèn)為是最佳實(shí)踐,可以幫助你建立良好的應(yīng)用程序。 自動(dòng)化測(cè)試是非常棒的工具,它能確保你的應(yīng)用程序在改變或增加新的功能時(shí)不會(huì)影響現(xiàn)有的功能,不應(yīng)該忽視。

PHP 有一些不同種類的測(cè)試工具 (或框架) 可以使用,它們使用不同的方法 - 但他們都試圖避免手動(dòng)測(cè)試和大型 QA 團(tuán)隊(duì)的需求,確保最近的變更不會(huì)破壞既有功能。

測(cè)試驅(qū)動(dòng)開發(fā)

Wikipedia 上的定義:

測(cè)試驅(qū)動(dòng)開發(fā) (TDD) 是一種以非常短的開發(fā)周期不斷迭代的軟件開發(fā)過程:首先開發(fā)者對(duì)將要實(shí)現(xiàn)的功能或者新的方法寫一個(gè)失敗的自動(dòng)化測(cè)試用例,然后就去寫代碼來通過這個(gè)測(cè)試用例,最終通過重構(gòu)代碼讓一其達(dá)到可接受的水準(zhǔn)。Kent Beck, 這個(gè)技術(shù)創(chuàng)造者或者說重新發(fā)現(xiàn)者,在2003年聲明TDD 鼓勵(lì)簡(jiǎn)單的設(shè)計(jì)和激勵(lì)信心。

目前你可以應(yīng)用的幾種不同類型的測(cè)試:

單元測(cè)試

單元測(cè)試是一種編程方法來確認(rèn)函數(shù),類和方法以我們預(yù)期的方式來工作,單元測(cè)試會(huì)貫穿整個(gè)項(xiàng)目的開發(fā)周期。通過檢查各個(gè)函數(shù)和方法的輸入輸出,你就可以保證內(nèi)部的邏輯已經(jīng)正確執(zhí)行。通過使用依賴注入和編寫"mock" 類以及 stubs 來確認(rèn)依賴被正確的使用,提高測(cè)試覆蓋率。

當(dāng)你創(chuàng)建一個(gè)類或者一個(gè)函數(shù),你應(yīng)該為它們的每一個(gè)行為創(chuàng)建一個(gè)單元測(cè)試。至少你應(yīng)該確認(rèn)當(dāng)你輸入一個(gè)錯(cuò)誤參數(shù)會(huì)觸發(fā)一個(gè)錯(cuò)誤,你輸入一個(gè)有效的參數(shù)會(huì)得到正確的結(jié)果。這會(huì)幫助你在開發(fā)周期后段對(duì)類或者函數(shù)做出修改后,確認(rèn)已有的功能任然可以正常的工作??商娲姆椒ㄊ窃谠创a中使用 var_dump() ,但這種方法卻不能去構(gòu)建一個(gè)或大或小的應(yīng)用。

單元測(cè)試的其他用處是在給開源項(xiàng)目貢獻(xiàn)代碼時(shí)。如果你寫了一個(gè)測(cè)試證明代碼有bug,然后修復(fù)它,并且展示測(cè)試的過程,這樣補(bǔ)丁將會(huì)更容易被接受。如果你在維護(hù)一個(gè)項(xiàng)目,在處理 pull request 的時(shí)候可以將單元測(cè)試作為一個(gè)要求。

PHPUnit 是業(yè)界PHP應(yīng)用開發(fā)單元測(cè)試框架的標(biāo)準(zhǔn),但也有其他可選的框架:

集成測(cè)試

Wikipedia 上的定義:

集成測(cè)試 (有時(shí)候稱為集成和測(cè)試,縮寫為 I&T)是把各個(gè)模塊組合在一起進(jìn)行整體測(cè)試的軟件測(cè)試階段。它處于單元測(cè)試之后,驗(yàn)收測(cè)試之前。集成測(cè)試將已經(jīng)經(jīng)過了單元測(cè)試的模塊做為輸入模塊,組合成一個(gè)整體,然后運(yùn)行集成測(cè)試用例,然后輸出一個(gè)可以進(jìn)行系統(tǒng)測(cè)試的系統(tǒng)。

許多相同的測(cè)試工具既可以運(yùn)用到單元測(cè)試,也可以運(yùn)用到集成測(cè)試。

功能性測(cè)試

有時(shí)候也被稱之為驗(yàn)收測(cè)試,功能測(cè)試是通過使用工具來生成自動(dòng)化的測(cè)試用例,然后在真實(shí)的系統(tǒng)上運(yùn)行。而不是單元測(cè)試中簡(jiǎn)單的驗(yàn)證單個(gè)模塊的正確性和集成測(cè)試中驗(yàn)證各個(gè)模塊間交互的正確性。這些工具會(huì)使用代表性的真實(shí)數(shù)據(jù)來模擬真實(shí)用戶的行為來驗(yàn)證系統(tǒng)的正確性。

功能測(cè)試的工具

  • Selenium
  • Mink
  • Codeception 是一個(gè)全棧的測(cè)試框架包括驗(yàn)收性測(cè)試工具。
  • Storyplayer 是一個(gè)全棧的測(cè)試框架并且支持隨時(shí)創(chuàng)建和銷毀測(cè)試環(huán)境。

行為驅(qū)動(dòng)開發(fā)

有兩種不同的行為驅(qū)動(dòng)開發(fā) (BDD): SpecBDD 和 StoryBDD。 SpecBDD 專注于代碼的技術(shù)行為,而 StoryBDD 專注于業(yè)務(wù)邏輯或功能的行為和互動(dòng)。這兩種 BDD 都有對(duì)應(yīng)的 PHP 框架。

采用 StoryBDD 時(shí), 你編寫可讀的故事來描述應(yīng)用程序的行為。接著這些故事可以作為應(yīng)用程序的實(shí)際測(cè)試案例執(zhí)行。Behat 是使用在 PHP 應(yīng)用程序中的 StoryBDD框架,它受到 Ruby 的 Cucumber 項(xiàng)目的啟發(fā)并且實(shí)現(xiàn)了 Gherkin DSL 來描述功能的行為。

采用 SpecBDD 時(shí), 你編寫規(guī)格來描述實(shí)際的代碼應(yīng)該有什么行為。你應(yīng)該描述函數(shù)或者方法應(yīng)該有什么行為,而不是測(cè)試函數(shù)或者方法。PHP 提供了 PHPSpec 框架來達(dá)到這個(gè)目的,這個(gè)框架受到了 Ruby 的 RSpec project 項(xiàng)目的啟發(fā)。

BDD 鏈接

  • Behat, PHP 的 StoryBDD 框架, 受到了 Ruby's Cucumber 項(xiàng)目的啟發(fā)。
  • PHPSpec, PHP 的 SpecBDD 框架, 受到了 Ruby's RSpec 項(xiàng)目的啟發(fā)。
  • Codeception 是一個(gè)使用 BDD 準(zhǔn)則的全棧測(cè)試框架。

其他測(cè)試工具

除了個(gè)別的測(cè)試驅(qū)動(dòng)和行為驅(qū)動(dòng)框架之外,還有一些通用的框架和輔助函數(shù)類庫,對(duì)任何的測(cè)試方法都很有用。

工具地址

上一篇:社區(qū)下一篇:文檔撰寫