欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 淺談如何提高PHP代碼質(zhì)量之端到端集成測試

淺談如何提高PHP代碼質(zhì)量之端到端集成測試

熱門標(biāo)簽:溫州外呼系統(tǒng)招商 天津電銷外呼系統(tǒng)違法嗎 銀行信貸電話機器人 上海400客服電話怎么申請 手機外呼系統(tǒng)什么原理 凱立德地鐵站地圖標(biāo)注 滄州電銷外呼系統(tǒng)價格 400電話個人能不能辦理 合肥ai電銷機器人費用

概述

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

$ php composer.phar require --dev behat/behat

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

target name="behat">
	exec executable="bin/behat" passthru="true" checkreturn="true" />
/target>…
target name="run" depends="phpcs,phpcpd,phan,phpspec,behat" />

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

Feature: Price Comparison In order to compare prices As a customer I need to break the currency barrier Scenario: Compare EUR and PLN Given I use nbp.pl comparator When I compare “100EUR” and “100PLN” Then It should return some result

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

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

//features/bootstrap/FeatureContext.php use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
class FeatureContext implements SnippetAcceptingContext{
	/** * Initializes context. */ public function __construct() { }
}

然后你可以執(zhí)行:

$ bin/behat --dry-run --append-snippets

Behat 將自動為場景中定義的每個步驟創(chuàng)建函數(shù)。
現(xiàn)在你可以通過填充函數(shù)的主體來開始實現(xiàn)真正的檢查:

// features/bootstrap/FeatureContext.php
?php
use Behat\Behat\Context\Context;
use Domain\Price;use Domain\PriceComparator;
use Infrastructure\NBPPriceConverter;
/*** Defines application features from the specific context.*/
class FeatureContext implements Context{
	/** @var PriceComparator */ 
	private $priceComparator;
	/** @var int */ 
	private $result; 
	/** * Initializes context. * 
	* Every scenario gets its own context instance.
	* You can also pass arbitrary arguments to the* context constructor through behat.yml. */
	public function __construct() { 
		
	} 
	/** * @Given I use nbp.pl comparator */ 
	public function iUseNbpPlComparator() {
		$this->priceComparator = new PriceComparator(new NBPPriceConverter());
	} 
	/** * @When I compare :price1 and :price2 */
	public function iCompareAnd($price1, $price2) {
		preg_match('/(\d+)([A-Z]+)/', $price1, $match1); 
		preg_match('/(\d+)([A-Z]+)/', $price2, $match2);
		$price1 = new Price($match1[1], $match1[2]);
		$price2 = new Price($match2[1], $match2[2]);
		$this->result = $this->priceComparator->compare($price1, $price2); 
	} 
	/** * @Then It should return some result */ 
	public function itShouldReturnSomeResult() {
		if (!is_int($this->result)) {
			throw new \DomainException('Returned value is not integer');
		} 
	}
}

最后,使用 ./bin/phing 運行所有的測試。你應(yīng)該得到以下結(jié)果:

Buildfile: /home/maciej/workspace/php-testing/build.xmlMyProject > phpcs: MyProject > phpcpd: phpcpd 4.0.0 by Sebastian Bergmann.0.00% duplicated lines out of 103 total lines of code. Time: 17 ms, Memory: 4.00MB MyProject > phan: MyProject > phpspec: / skipped: 0% / pending: 0% / passed: 100% / failed: 0% / broken: 0% / 3 examples2 specs3 examples (3 passed)15ms MyProject > behat: Feature: Price Comparison In order to compare prices As a customer I need to break the currency barrier Scenario: Compare EUR and PLN # features/price.feature:6 Given I use nbp.pl comparator # FeatureContext::iUseNbpPlComparator() When I compare "100EUR" and "100PLN" # FeatureContext::iCompareAnd() Then It should return some result # FeatureContext::itShouldReturnSomeResult()1 scenario (1 passed)3 steps (3 passed)0m0.01s (9.13Mb) MyProject > run: BUILD FINISHED Total time: 1.1000 second

正如你所看到的,Behat 準(zhǔn)備了一份很好的報告,說明我們的應(yīng)用程序做了什么,結(jié)果是什么。下一次,當(dāng)項目經(jīng)理詢問你在測試中涉及到哪些場景時,你可以給他一個 Behat 輸出!

1、測試的結(jié)構(gòu)

每個測試都包括:

  • 對該場景的一些準(zhǔn)備,用“Given”部分表示
  • “When”部分所涵蓋的一些動作
  • 一些檢查被標(biāo)記為“Then”部分

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

Scenario: Compare EUR and PLN Given nbp.pl comparator is available And I use nbp.pl comparator When I compare "100EUR" and "100PLN" And I save the result Then It should return some result And the first amount should be greater

2、上下文

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

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

關(guān)于如何在 Behat 建立許多上下文的更多信息,請參考http://behat.org/en/latest/userguide/context.html的文檔。

3、如何使用Behat 

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

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

總結(jié)

從以上的文章中,你已經(jīng)學(xué)習(xí)了如何在你的項目中設(shè)置六個有用的工具:

  • PHing 用于運行你的構(gòu)建
  • PHPCS 用于自動檢查代碼格式
  • PHPCPD 用于檢測重復(fù)代碼的
  • Phan 用于高級靜態(tài)代碼分析
  • PHPSpec 用于單元測試
  • Behat 用于端到端和集成測試

現(xiàn)在,你可以向 git 提交鉤子添加 ./bin/phing,并設(shè)置持續(xù)集成來運行每個提交的測試。

是不是突然之間,沒有什么能阻止你寫出高質(zhì)量的 PHP 代碼!

以上就是淺談如何提高PHP代碼質(zhì)量之端到端集成測試的詳細(xì)內(nèi)容,更多關(guān)于如何提高PHP代碼質(zhì)量之端到端集成測試的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解Yaf框架PHPUnit集成測試方法
  • PHP單元測試配置與使用方法詳解
  • PHPUnit + Laravel單元測試常用技能
  • PHP使用phpunit進(jìn)行單元測試示例
  • php使用yield對性能提升的測試實例分析
  • 高質(zhì)量PHP代碼的50個實用技巧必備(下)
  • 高質(zhì)量PHP代碼的50個實用技巧必備(上)
  • 很讓人受教的 提高php代碼質(zhì)量36計
  • 寫出高質(zhì)量的PHP程序

標(biāo)簽:金華 酒泉 七臺河 赤峰 溫州 洛陽 白城 怒江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談如何提高PHP代碼質(zhì)量之端到端集成測試》,本文關(guān)鍵詞  淺談,如何,提高,PHP,代碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談如何提高PHP代碼質(zhì)量之端到端集成測試》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺談如何提高PHP代碼質(zhì)量之端到端集成測試的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美黄色一级生活片| 国产欧美日韩精品在线| 亚洲午夜免费视频| 亚洲国产欧美日韩在线| 欧美在线观看你懂的| 亚洲伦在线观看| 99久久精品99国产精品| 色噜噜久久综合| 亚洲日本成人在线观看| 99re这里只有精品6| 91国偷自产一区二区使用方法| 国产精品久久久久久久午夜片| 成人一区在线观看| 一本到一区二区三区| 亚洲精选在线视频| gogo亚洲国模私拍人体| 欧美日韩免费一区二区三区视频 | 日韩精品一区二| 奇米四色…亚洲| 好吊视频在线观看| 久久精品视频一区| 成人免费福利片| 欧美在线看片a免费观看| 亚洲国产毛片aaaaa无费看| 东京热av一区| 精品久久国产字幕高潮| 国产一区二区三区免费播放| 亚洲伦理一区二区三区| 亚洲欧美视频一区| 波多野结衣办公室双飞| 日韩三级.com| 国产一区二区三区高清播放| 人妻少妇精品一区二区三区| 一区二区三区免费网站| 菠萝菠萝蜜网站| 久久精品一区二区三区不卡 | 国产乱子伦视频一区二区三区| 黄色录像一级片| 一区二区三区**美女毛片| 呦呦视频在线观看| 国产欧美日韩激情| 青青草精品在线| 欧美大片一区二区三区| 粉嫩蜜臀av国产精品网站| 欧美丝袜第三区| 久久精品国产一区二区三| 日韩激情小视频| 亚洲第一成人在线| 亚洲第一综合网| 日韩美女啊v在线免费观看| 亚洲一区二区三区四区av| 久久日一线二线三线suv| 成人av在线资源| 欧美一区二区黄| 国产成人av网站| 在线不卡欧美精品一区二区三区| 久久国产精品一区二区| 91久久久免费一区二区| 日本欧美一区二区三区| 外国一级黄色片| 日韩国产在线观看| 免费中文字幕在线| 奇米影视一区二区三区| 色综合久久久久网| 久久丁香综合五月国产三级网站| 色女孩综合影院| 精品一区二区三区av| 欧美无砖砖区免费| 久久99久国产精品黄毛片色诱| 91精品福利视频| 激情综合网激情| 欧美精品777| 成人听书哪个软件好| 日韩免费观看2025年上映的电影| va亚洲va日韩不卡在线观看| 精品国产伦一区二区三区免费| 91伊人久久大香线蕉| 久久夜色精品一区| 日本道中文字幕| 18欧美亚洲精品| 人人妻人人澡人人爽| 亚洲一区二区3| 色综合天天综合| 国产在线精品国自产拍免费| 欧美美女视频在线观看| 成人av资源站| 国产三级一区二区三区| 91精品人妻一区二区| 亚洲线精品一区二区三区八戒| 精品自拍偷拍视频| 国产一区二区三区四区五区美女| 91麻豆精品91久久久久久清纯| aaa欧美日韩| 中文字幕精品综合| 亚洲精品成人无码| 日韩av成人高清| 欧美片在线播放| 99精品欧美一区二区蜜桃免费| 国产欧美日本一区视频| 中文字幕免费视频| 青青草伊人久久| 91精品国产全国免费观看| ass极品水嫩小美女ass| 亚洲欧美激情插 | 国内毛片毛片毛片毛片毛片| 免费xxxx性欧美18vr| 在线播放91灌醉迷j高跟美女| 中文字幕avav| 亚洲人成在线观看一区二区| 国产一二三四区| 大桥未久av一区二区三区中文| 国产三级精品在线| 天天舔天天操天天干| 麻豆精品一区二区三区| 日韩一区二区三区电影在线观看| 日本人妻一区二区三区| 一区二区在线观看av| 色八戒一区二区三区| 成人av网在线| 日韩久久一区二区| 日本乱人伦aⅴ精品| www.成人网.com| 亚洲欧洲性图库| 色一情一伦一子一伦一区| av一本久道久久综合久久鬼色| 最新不卡av在线| 在线精品视频一区二区| 久久久久无码精品| 亚洲成人1区2区| 欧美一个色资源| 在线观看福利片| 韩国v欧美v日本v亚洲v| 国产欧美久久久精品影院| 我要看黄色一级片| 成人午夜精品在线| 亚洲欧美福利一区二区| 欧美亚洲丝袜传媒另类| 亚洲精品成人无码毛片| 日韩电影在线观看网站| 精品国产乱码久久久久久久久| 一级片久久久久| 丁香网亚洲国际| 亚洲乱码一区二区三区在线观看| 欧美性一二三区| 特级西西人体4444xxxx| 精品午夜一区二区三区在线观看| 国产视频一区二区三区在线观看| 日韩视频中文字幕在线观看| 99re8在线精品视频免费播放| 亚洲一区二区欧美日韩| 日韩视频免费观看高清完整版 | 少妇真人直播免费视频| 韩国精品一区二区| 亚洲欧洲日韩一区二区三区| 欧美少妇一区二区| 欧美高清性xxxx| 韩国精品一区二区| 亚洲少妇30p| 3atv一区二区三区| 国产亚洲精品精品精品| av高清久久久| 日本在线不卡视频一二三区| 日本一区二区三区在线不卡| 色妹子一区二区| 极品人妻一区二区三区| 国产99久久精品| 亚洲无线码一区二区三区| 欧美大白屁股肥臀xxxxxx| 亚洲欧美另类日本| 男人女人拔萝卜视频| 日韩黄色一级片| 国产精品麻豆视频| 91精品国产高清一区二区三区| 永久免费观看片现看| 亚洲精品鲁一鲁一区二区三区| 久久精品免费看| 亚洲精品国产a| 精品国产免费久久| 欧美伊人久久久久久久久影院 | 欧美做受高潮6| 99精品一区二区三区| 麻豆精品视频在线| 亚洲视频每日更新| 精品久久久久久最新网址| 日本国产一区二区| 亚洲精品国产精品国自产网站| 99精品久久99久久久久| 蜜臀av性久久久久蜜臀aⅴ | 欧美男同性恋视频网站| 天堂资源在线视频| 久久免费精品国产| 成人短视频下载| 久久国产精品免费| 伊人婷婷欧美激情| 久久九九99视频| 欧美亚洲一区三区| 欧美日韩中文字幕视频| 国产精品无码自拍| 国产成人精品免费| 青青草国产成人av片免费|