




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第淺談如何提高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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強林業(yè)資源保護重視林業(yè)快速發(fā)展
- 中小學生法制教育主題班會
- 跨境電商代理授權及售后服務合同
- 汽車銷售公司車輛售后服務及客戶關系維護合同
- 倉儲式超市場地租賃合同
- 國際快遞常年運輸合同范本
- 商業(yè)街區(qū)立體停車庫租賃及運營管理合同
- 中班健康:我的心情管理
- 陽光物業(yè)子公司下屬員工選聘與崗位培訓合同
- 餐廳廚房承包與特色調料研發(fā)合同
- 骨科護理實習生小講課
- 2025至2030中國汽車散熱器行業(yè)市場發(fā)展分析及商業(yè)模式與投融資發(fā)展報告
- 2025至2030年中國金剛石繩鋸行業(yè)市場運行格局及前景戰(zhàn)略分析報告
- 統(tǒng)編版語文二下園地三+單元復習課 課件
- 云南省昆明市五華區(qū)2023-2024學年八年級下學期7月期末物理試題(含答案)
- 2025年上海市研發(fā)公共服務平臺管理中心招聘題庫帶答案分析
- 2025年輕人情緒消費趨勢報告-抖音商城xsocialbeta-202506
- 工程保險課件
- 培訓中心項目管理制度
- 高中教科研課題:《新課程背景下高中語文情境教學改革研究》課題工作匯報
- 金融公司干股協(xié)議書
評論
0/150
提交評論