?
This document uses PHP Chinese website manual Release
Wikipedia 上的定義:
測試驅(qū)動開發(fā) (TDD) 是一種以非常短的開發(fā)周期不斷迭代的軟件開發(fā)過程:首先開發(fā)者對將要實現(xiàn)的功能或者新的方法寫一個失敗的自動化測試用例,然后就去寫代碼來通過這個測試用例,最終通過重構(gòu)代碼讓一其達(dá)到可接受的水準(zhǔn)。Kent Beck, 這個技術(shù)創(chuàng)造者或者說重新發(fā)現(xiàn)者,在2003年聲明TDD 鼓勵簡單的設(shè)計和激勵信心。
目前你可以應(yīng)用的幾種不同類型的測試:
單元測試
單元測試是一種編程方法來確認(rèn)函數(shù),類和方法以我們預(yù)期的方式來工作,單元測試會貫穿整個項目的開發(fā)周期。通過檢查各個函數(shù)和方法的輸入輸出,你就可以保證內(nèi)部的邏輯已經(jīng)正確執(zhí)行。通過使用依賴注入和編寫”mock” 類以及 stubs 來確認(rèn)依賴被正確的使用,提高測試覆蓋率。
當(dāng)你創(chuàng)建一個類或者一個函數(shù),你應(yīng)該為它們的每一個行為創(chuàng)建一個單元測試。至少你應(yīng)該確認(rèn)當(dāng)你輸入一個錯誤參數(shù)會觸發(fā)一個錯誤,你輸入一個有效的參數(shù)會得到正確的結(jié)果。這會幫助你在開發(fā)周期后段對類或者函數(shù)做出修改后,確認(rèn)已有的功能任然可以正常的工作??商娲姆椒ㄊ窃谠创a中使用 var_dump() ,但這種方法卻不能去構(gòu)建一個或大或小的應(yīng)用。
單元測試的其他用處是在給開源項目貢獻(xiàn)代碼時。如果你寫了一個測試證明代碼有bug,然后修復(fù)它,并且展示測試的過程,這樣補(bǔ)丁將會更容易被接受。如果你在維護(hù)一個項目,在處理 pull request 的時候可以將單元測試作為一個要求。
PHPUnit 是業(yè)界PHP應(yīng)用開發(fā)單元測試框架的標(biāo)準(zhǔn),但也有其他可選的框架:
atoum
Kahlan
Peridot
SimpleTest
集成測試
Wikipedia 上的定義:
集成測試 (有時候稱為集成和測試,縮寫為 I&T)是把各個模塊組合在一起進(jìn)行整體測試的軟件測試階段。它處于單元測試之后,驗收測試之前。集成測試將已經(jīng)經(jīng)過了單元測試的模塊做為輸入模塊,組合成一個整體,然后運(yùn)行集成測試用例,然后輸出一個可以進(jìn)行系統(tǒng)測試的系統(tǒng)。
許多相同的測試工具既可以運(yùn)用到單元測試,也可以運(yùn)用到集成測試。
功能性測試
有時候也被稱之為驗收測試,功能測試是通過使用工具來生成自動化的測試用例,然后在真實的系統(tǒng)上運(yùn)行。而不是單元測試中簡單的驗證單個模塊的正確性和集成測試中驗證各個模塊間交互的正確性。這些工具會使用代表性的真實數(shù)據(jù)來模擬真實用戶的行為來驗證系統(tǒng)的正確性。
功能測試的工具
Selenium
Mink
Codeception is a full-stack testing framework that includes acceptance testing tools
Storyplayer is a full-stack testing framework that includes support for creating and destroying test environments on demand
行為驅(qū)動開發(fā)
有兩種不同的行為驅(qū)動開發(fā) (BDD): SpecBDD 和 StoryBDD。 SpecBDD 專注于代碼的技術(shù)行為,而 StoryBDD 專注于業(yè)務(wù)邏輯或功能的行為和互動。這兩種 BDD 都有對應(yīng)的 PHP 框架。
采用 StoryBDD 時, 你編寫可讀的故事來描述應(yīng)用程序的行為。接著這些故事可以作為應(yīng)用程序的實際測試案例執(zhí)行。Behat 是使用在 PHP 應(yīng)用程序中的 StoryBDD框架,它受到 Ruby 的 Cucumber 項目的啟發(fā)并且實現(xiàn)了 Gherkin DSL 來描述功能的行為。
采用 SpecBDD 時, 你編寫規(guī)格來描述實際的代碼應(yīng)該有什么行為。你應(yīng)該描述函數(shù)或者方法應(yīng)該有什么行為,而不是測試函數(shù)或者方法。PHP 提供了 PHPSpec 框架來達(dá)到這個目的,這個框架受到了 Ruby 的 RSpec project 項目的啟發(fā)。
BDD 鏈接
Behat, PHP 的 StoryBDD 框架, 受到了 Ruby’s Cucumber 項目的啟發(fā)。
PHPSpec, PHP 的 SpecBDD 框架, 受到了 Ruby’s RSpec 項目的啟發(fā)。
Codeception 是一個使用 BDD 準(zhǔn)則的全棧測試框架。