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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第淺談如何提高PHP代碼質量之端到端集成測試目錄概述1、測試的結構2、上下文3、如何使用Behat總結

概述

在這里,我們可以使用為行為驅動開發(fā)構建的工具——官方PHP的Cucumber實現——Behat。我們可以通過運行以下代碼來安裝它:

$phpcomposer.pharrequire--devbehat/behat

增加一個目標到build.xml(在本文的第一部分中描述了Phing設置)

targetname="behat"

execexecutable="bin/behat"passthru="true"checkreturn="true"/

/target…

targetname="run"depends="phpcs,phpcpd,phan,phpspec,behat"/

然后,你應該為文件features/price.feature的測試創(chuàng)建一個規(guī)范。

Feature:PriceComparisonInordertocomparepricesAsacustomerIneedtobreakthecurrencybarrierScenario:CompareEURandPLNGivenIusenbp.plcomparatorWhenIcompare“100EUR”and“100PLN”ThenItshouldreturnsomeresult

這個測試場景非常容易閱讀,并且應該給你一個關于該特性應該如何工作的良好印象。不幸的是,計算機通常并不真正理解人類語言,所以現在是為每一步編寫代碼的時候了。

你可以通過運行./bin/behat-init來生成它的代碼模板。它應該會創(chuàng)建一個這樣的類:

//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將自動為場景中定義的每個步驟創(chuàng)建函數。

現在你可以通過填充函數的主體來開始實現真正的檢查:

//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運行所有的測試。你應該得到以下結果:

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準備了一份很好的報告,說明我們的應用程序做了什么,結果是什么。下一次,當項目經理詢問你在測試中涉及到哪些場景時,你可以給他一個Behat輸出!

1、測試的結構

每個測試都包括:

對該場景的一些準備,用“Given”部分表示

“When”部分所涵蓋的一些動作

一些檢查被標記為“Then”部分

每個部分都可以包含多個與“And”關鍵字連接的步驟:

Scenario:CompareEURandPLNGivennbp.plcomparatorisavailableAndIusenbp.plcomparatorWhenIcompare"100EUR"and"100PLN"AndIsavetheresultThenItshouldreturnsomeresultAndthefirstamountshouldbegreater

2、上下文

Behat允許你為你的測試定義多個上下文。這意味著你可以將步驟代碼分割成多個類,并從不同的角度去測試你的場景。

你可以例如:為web上下文編寫代碼,它將使用你的應用程序HTTP控制器運行你的測試步驟。你還可以創(chuàng)建“domain”上下文,它將只使用PHPAPI調用來運行你的業(yè)務邏輯。通過這種方式,你可以單獨地測試業(yè)務邏輯集成,從端到端應用程序測試。

關于如何在Behat建立許多上下文的更多信息,請參考/en/latest/userguide/context.html的文檔。

3、如何使用Behat

正如一開始所提到的,你可以使用Behat進行集成測試。通常情況下,你的代碼依賴于一些外部的第三方系統(tǒng)。當我們在第2部分中編寫單元測試時,我們總是假設外部依賴關系像預期的那樣工作。使用Behat,你可以編寫測試場景,它將自動運行你的代碼,并檢查它是否正確地使用真實場景的服務。

最重要的是,Behat對于測試系統(tǒng)使用的復雜的端到端場景非常有用。它允許你隱藏在一個可讀性的名字后面運行測試步驟所需的復雜代碼,并編寫一個人人都能理解的場景。

總結

從以上的文章中,你已經學習了如何在你的項目中設置六個有用的工具:

PHing用于運行你的構建

PHPCS用于自動檢查代碼格式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論