PHP測(cè)試篇:測(cè)試驅(qū)動(dòng)開發(fā)和行為驅(qū)動(dòng)開發(fā)
為PHP代碼編寫自動(dòng)化測(cè)試被認(rèn)為是一個(gè)最佳實(shí)踐,可以幫助你構(gòu)建出高質(zhì)量的應(yīng)用。自動(dòng)化測(cè)試可以幫助你確認(rèn)沒有因?yàn)橹貥?gòu)或添加 新功能而破壞原有功能,所以應(yīng)該重視自動(dòng)化測(cè)試。
PHP有多種類型的測(cè)試工具和框架可以使用,具體方法各有區(qū)別——但是它們的目標(biāo)都是避免手工測(cè)試,滿足大型QA組織的需求,保證最新的 更改沒有破壞已有功能。
測(cè)試驅(qū)動(dòng)開發(fā)Wikipedia的定義:
測(cè)試驅(qū)動(dòng)開發(fā)(TDD)是以非常短的開發(fā)周期,不斷進(jìn)行迭代的軟件開發(fā)流程:首先開發(fā)者針對(duì)改進(jìn)或新功能編寫失敗的自動(dòng)化測(cè)試用例,然后編寫代碼使測(cè)試用例通過, 最后重構(gòu)代碼,讓代碼滿足可接受的標(biāo)準(zhǔn)。Kent Beck,該技術(shù)的創(chuàng)建者或者說重新發(fā)現(xiàn)者,在2003年聲明TDD鼓勵(lì)簡(jiǎn)單的設(shè)計(jì)和提振信心。
目前對(duì)應(yīng)用有多種類型的測(cè)試:
單元測(cè)試單元測(cè)試是從編寫開始,貫穿于整個(gè)開發(fā)周期的一種用于保證函數(shù)、類和方法的行為與預(yù)期一致的編程方法。通過檢查各個(gè)函數(shù)和方法的輸入和輸出值,你可以保證它們 內(nèi)部邏輯已經(jīng)正確執(zhí)行;通過依賴注入、編寫mock類和stubs,你可以驗(yàn)證依賴是否已經(jīng)正確處理,提高測(cè)試覆蓋率。
在編寫一個(gè)類或函數(shù)的時(shí)候,應(yīng)該為它的每一個(gè)行為創(chuàng)建一個(gè)單元測(cè)試,至少你要保證它收到錯(cuò)誤參數(shù)時(shí)能夠觸發(fā)錯(cuò)誤,而參數(shù)正確時(shí)能正常工作。這可以幫你在后面 修改類或函數(shù)的時(shí)候,確認(rèn)已有功能仍然正常工作。PHP中var_dump()的功能與此類似,但是它是無法用于創(chuàng)建應(yīng)用的。
單元測(cè)試的另外一個(gè)用武之地是在給開源項(xiàng)目貢獻(xiàn)代碼時(shí),如果你編寫一個(gè)測(cè)試,證明代碼存在bug,然后修復(fù)代碼,讓測(cè)試通過,這樣該補(bǔ)丁被接受的概率要高很多。 如果你的項(xiàng)目接受人家的補(bǔ)丁,你應(yīng)該把單元測(cè)試作為項(xiàng)目的一項(xiàng)要求。
PHPUnit是PHP應(yīng)用的單元測(cè)試框架的業(yè)界標(biāo)準(zhǔn),其他幾個(gè)可選框架是:
SimpleTestEnhance PHPPUnitatoum集成測(cè)試Wikipedia的定義:
集成測(cè)試(也稱集成與測(cè)試,縮寫為I&T)是把各個(gè)獨(dú)立模塊集成在一起,作為一個(gè)整體進(jìn)行測(cè)試的軟件測(cè)試階段,它處于單元測(cè)試和驗(yàn)收測(cè)試之間。集成測(cè)試把已經(jīng) 做過單元測(cè)試的模塊集成在一塊,然后運(yùn)行集成測(cè)試用例,最終輸出一個(gè)可以進(jìn)行系統(tǒng)測(cè)試的系統(tǒng)。
很多單元測(cè)試工具同時(shí)也可以用于集成測(cè)試,并且原理也是相通的。
功能測(cè)試有時(shí)也稱為驗(yàn)收測(cè)試,使用工具創(chuàng)建自動(dòng)化的測(cè)試用例,然后在真實(shí)的系統(tǒng)上運(yùn)行,這一點(diǎn)與單元測(cè)試驗(yàn)證單個(gè)模塊的正確性和集成測(cè)試驗(yàn)證模塊間交互的正確性是有 區(qū)別的,這些工具通常使用真實(shí)的數(shù)據(jù)集來模擬真實(shí)用戶的使用行為來驗(yàn)證系統(tǒng)的正確性。
功能測(cè)試工具SeleniumMinkCodeception?is a full-stack testing framework that includes acceptance testing tools行為驅(qū)動(dòng)開發(fā)行為驅(qū)動(dòng)開發(fā)(BDD)有兩種方式:SpecBDD和StoryBDD。SpecBDD關(guān)注技術(shù)行為或代碼,而StoryBDD關(guān)注業(yè)務(wù)、特性和交互,這兩種方式都有對(duì)應(yīng)的PHP框架。
采用StoryBDD,開發(fā)者編寫人類可讀的故事來描述應(yīng)用的行為,然后這些故事可以作為應(yīng)用的測(cè)試用例。PHP中用于StoryBDD編程的框架是Behat,從Ruby 的Cucumber項(xiàng)目演化而來,實(shí)現(xiàn)了Gherkin DSL來描述特性行為。
采用SpecBDD,開發(fā)者編寫規(guī)格說明來描述實(shí)際代碼的行為,與測(cè)試一個(gè)函數(shù)或方法不同,規(guī)格描述了一個(gè)函數(shù)或方法應(yīng)該具有的行為。PHP中的PHPSpec框 架提供該編程方式的支持,它也是從Ruby的RSpec project演化而來。
BDD鏈接Behat, the StoryBDD framework for PHP, inspired by Ruby’s?Cucumber?project;PHPSpec, the SpecBDD framework for PHP, inspired by Ruby’s?RSpec?project;Codeception?is a full-stack testing framework that uses BDD principles.測(cè)試輔助工具除了測(cè)試驅(qū)動(dòng)和行為驅(qū)動(dòng)開發(fā)框架,還有大量的通用框架和函數(shù)庫(kù),可以在各種開發(fā)方法下使用。
工具鏈接Selenium?is a browser automation tool which can be?integrated with PHPUnitMockery?is a Mock Object Framework which can be integrated with?PHPUnit?or?PHPSpec相關(guān)文章:
1. Spring security 自定義過濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)2. Java8內(nèi)存模型PermGen Metaspace實(shí)例解析3. python tkinter實(shí)現(xiàn)下載進(jìn)度條及抖音視頻去水印原理4. ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼5. 一文搞懂 parseInt()函數(shù)異常行為6. Python 有可能刪除 GIL 嗎?7. Python使用sftp實(shí)現(xiàn)上傳和下載功能8. python捕獲警告的三種方法9. python 統(tǒng)計(jì)list中各個(gè)元素出現(xiàn)的次數(shù)的幾種方法10. Python基于百度AI實(shí)現(xiàn)抓取表情包
