




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第淺談如何提高PHP代碼質(zhì)量之端到端集成測試目錄概述1、測試的結(jié)構(gòu)2、上下文3、如何使用Behat總結(jié)
概述
在這里,我們可以使用為行為驅(qū)動(dòng)開發(fā)構(gòu)建的工具——官方PHP的Cucumber實(shí)現(xiàn)——Behat。我們可以通過運(yùn)行以下代碼來安裝它:
$phpcomposer.pharrequire--devbehat/behat
增加一個(gè)目標(biāo)到build.xml(在本文的第一部分中描述了Phing設(shè)置)
targetname="behat"
execexecutable="bin/behat"passthru="true"checkreturn="true"/
/target…
targetname="run"depends="phpcs,phpcpd,phan,phpspec,behat"/
然后,你應(yīng)該為文件features/price.feature的測試創(chuàng)建一個(gè)規(guī)范。
Feature:PriceComparisonInordertocomparepricesAsacustomerIneedtobreakthecurrencybarrierScenario:CompareEURandPLNGivenIusenbp.plcomparatorWhenIcompare“100EUR”and“100PLN”ThenItshouldreturnsomeresult
這個(gè)測試場景非常容易閱讀,并且應(yīng)該給你一個(gè)關(guān)于該特性應(yīng)該如何工作的良好印象。不幸的是,計(jì)算機(jī)通常并不真正理解人類語言,所以現(xiàn)在是為每一步編寫代碼的時(shí)候了。
你可以通過運(yùn)行./bin/behat-init來生成它的代碼模板。它應(yīng)該會(huì)創(chuàng)建一個(gè)這樣的類:
//features/bootstrap/FeatureContext.phpuseBehat\Behat\Context\SnippetAcceptingContext;
useBehat\Gherkin\Node\PyStringNode;
useBehat\Gherkin\Node\TableNode;
classFeatureContextimplementsSnippetAcceptingContext{
/***Initializescontext.*/publicfunction__construct(){}
}
然后你可以執(zhí)行:
$bin/behat--dry-run--append-snippets
Behat將自動(dòng)為場景中定義的每個(gè)步驟創(chuàng)建函數(shù)。
現(xiàn)在你可以通過填充函數(shù)的主體來開始實(shí)現(xiàn)真正的檢查:
//features/bootstrap/FeatureContext.php
useBehat\Behat\Context\Context;
useDomain\Price;useDomain\PriceComparator;
useInfrastructure\NBPPriceConverter;
/***Definesapplicationfeaturesfromthespecificcontext.*/
classFeatureContextimplementsContext{
/**@varPriceComparator*/
private$priceComparator;
/**@varint*/
private$result;
/***Initializescontext.*
*Everyscenariogetsitsowncontextinstance.
*Youcanalsopassarbitraryargumentstothe*contextconstructorthroughbehat.yml.*/
publicfunction__construct(){
/***@GivenIusenbp.plcomparator*/
publicfunctioniUseNbpPlComparator(){
$this-priceComparator=newPriceComparator(newNBPPriceConverter());
/***@WhenIcompare:price1and:price2*/
publicfunctioniCompareAnd($price1,$price2){
preg_match('/(\d+)([A-Z]+)/',$price1,$match1);
preg_match('/(\d+)([A-Z]+)/',$price2,$match2);
$price1=newPrice($match1[1],$match1[2]);
$price2=newPrice($match2[1],$match2[2]);
$this-result=$this-priceComparator-compare($price1,$price2);
/***@ThenItshouldreturnsomeresult*/
publicfunctionitShouldReturnSomeResult(){
if(!is_int($this-result)){
thrownew\DomainException('Returnedvalueisnotinteger');
}
最后,使用./bin/phing運(yùn)行所有的測試。你應(yīng)該得到以下結(jié)果:
Buildfile:/home/maciej/workspace/php-testing/build.xmlMyProjectphpcs:MyProjectphpcpd:phpcpd4.0.0bySebastianBergmann.0.00%duplicatedlinesoutof103totallinesofcode.Time:17ms,Memory:4.00MBMyProjectphan:MyProjectphpspec:/skipped:0%/pending:0%/passed:100%/failed:0%/broken:0%/3examples2specs3examples(3passed)15msMyProjectbehat:Feature:PriceComparisonInordertocomparepricesAsacustomerIneedtobreakthecurrencybarrierScenario:CompareEURandPLN#features/price.feature:6GivenIusenbp.plcomparator#FeatureContext::iUseNbpPlComparator()WhenIcompare"100EUR"and"100PLN"#FeatureContext::iCompareAnd()ThenItshouldreturnsomeresult#FeatureContext::itShouldReturnSomeResult()1scenario(1passed)3steps(3passed)0m0.01s(9.13Mb)MyProjectrun:BUILDFINISHEDTotaltime:1.1000second
正如你所看到的,Behat準(zhǔn)備了一份很好的報(bào)告,說明我們的應(yīng)用程序做了什么,結(jié)果是什么。下一次,當(dāng)項(xiàng)目經(jīng)理詢問你在測試中涉及到哪些場景時(shí),你可以給他一個(gè)Behat輸出!
1、測試的結(jié)構(gòu)
每個(gè)測試都包括:
對該場景的一些準(zhǔn)備,用“Given”部分表示
“When”部分所涵蓋的一些動(dòng)作
一些檢查被標(biāo)記為“Then”部分
每個(gè)部分都可以包含多個(gè)與“And”關(guān)鍵字連接的步驟:
Scenario:CompareEURandPLNGivennbp.plcomparatorisavailableAndIusenbp.plcomparatorWhenIcompare"100EUR"and"100PLN"AndIsavetheresultThenItshouldreturnsomeresultAndthefirstamountshouldbegreater
2、上下文
Behat允許你為你的測試定義多個(gè)上下文。這意味著你可以將步驟代碼分割成多個(gè)類,并從不同的角度去測試你的場景。
你可以例如:為web上下文編寫代碼,它將使用你的應(yīng)用程序HTTP控制器運(yùn)行你的測試步驟。你還可以創(chuàng)建“domain”上下文,它將只使用PHPAPI調(diào)用來運(yùn)行你的業(yè)務(wù)邏輯。通過這種方式,你可以單獨(dú)地測試業(yè)務(wù)邏輯集成,從端到端應(yīng)用程序測試。
關(guān)于如何在Behat建立許多上下文的更多信息,請參考/en/latest/userguide/context.html的文檔。
3、如何使用Behat
正如一開始所提到的,你可以使用Behat進(jìn)行集成測試。通常情況下,你的代碼依賴于一些外部的第三方系統(tǒng)。當(dāng)我們在第2部分中編寫單元測試時(shí),我們總是假設(shè)外部依賴關(guān)系像預(yù)期的那樣工作。使用Behat,你可以編寫測試場景,它將自動(dòng)運(yùn)行你的代碼,并檢查它是否正確地使用真實(shí)場景的服務(wù)。
最重要的是,Behat對于測試系統(tǒng)使用的復(fù)雜的端到端場景非常有用。它允許你隱藏在一個(gè)可讀性的名字后面運(yùn)行測試步驟所需的復(fù)雜代碼,并編寫一個(gè)人人都能理解的場景。
總結(jié)
從以上的文章中,你已經(jīng)學(xué)習(xí)了如何在你的項(xiàng)目中設(shè)置六個(gè)有用的工具:
PHing用于運(yùn)行你的構(gòu)建
PHPCS用于自動(dòng)檢查代碼格式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國內(nèi)壓式中空纖維超濾膜市場現(xiàn)狀分析及前景預(yù)測報(bào)告
- 2025至2030年前叉肩拉圓弧機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國第三方物流倉庫管理系統(tǒng)行業(yè)投資前景及策略咨詢報(bào)告
- 2025-2030年中國兒童摩登鞋數(shù)據(jù)監(jiān)測研究報(bào)告
- 2024至2030年中國手拉式烘干機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國GPS車輛定位系統(tǒng)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024年中國磁性魔塊玩具數(shù)據(jù)監(jiān)測報(bào)告
- 2024年中國引棒市場調(diào)查研究報(bào)告
- 2024年中國ESP網(wǎng)站自助開發(fā)平臺(tái)數(shù)據(jù)監(jiān)測報(bào)告
- 被人打賠償協(xié)議書模板
- 期中試題(含答案) 2024-2025學(xué)年北師大版數(shù)學(xué)八年級(jí)下冊
- 剪映專業(yè)版教學(xué)課件
- 剝離土方合同范例
- 大學(xué)生職業(yè)規(guī)劃學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 混凝土中多點(diǎn)聚集爆炸效應(yīng)起爆參數(shù)優(yōu)化設(shè)計(jì)
- 包工頭和建筑工人雇傭協(xié)議
- 華興數(shù)控SPM3500伺服驅(qū)動(dòng)器中文說明書
- 2024年新版全員消防安全知識(shí)培訓(xùn)
- 山東省2024年中考生物試卷七套合卷【附答案】
- 形象藝術(shù)設(shè)計(jì)智慧樹知到答案2024年西安工程大學(xué)
- 醫(yī)學(xué)影像檢查技術(shù)學(xué)智慧樹知到答案2024年浙江中醫(yī)藥大學(xué)
評論
0/150
提交評論