淺談如何提高PHP代碼質(zhì)量之端到端集成測試_第1頁
淺談如何提高PHP代碼質(zhì)量之端到端集成測試_第2頁
淺談如何提高PHP代碼質(zhì)量之端到端集成測試_第3頁
淺談如何提高PHP代碼質(zhì)量之端到端集成測試_第4頁
淺談如何提高PHP代碼質(zhì)量之端到端集成測試_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論