婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

概述

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

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

增加一個(gè)目標(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 的測(cè)試創(chuàng)建一個(gè)規(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

這個(gè)測(cè)試場(chǎng)景非常容易閱讀,并且應(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.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 將自動(dòng)為場(chǎng)景中定義的每個(gè)步驟創(chuàng)建函數(shù)。
現(xiàn)在你可以通過填充函數(shù)的主體來開始實(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ùn)行所有的測(cè)試。你應(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)備了一份很好的報(bào)告,說明我們的應(yīng)用程序做了什么,結(jié)果是什么。下一次,當(dāng)項(xiàng)目經(jīng)理詢問你在測(cè)試中涉及到哪些場(chǎng)景時(shí),你可以給他一個(gè) Behat 輸出!

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

每個(gè)測(cè)試都包括:

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

每個(gè)部分都可以包含多個(gè)與“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 允許你為你的測(cè)試定義多個(gè)上下文。這意味著你可以將步驟代碼分割成多個(gè)類,并從不同的角度去測(cè)試你的場(chǎng)景。

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

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

3、如何使用Behat 

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

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

總結(jié)

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

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

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

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

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談如何提高PHP代碼質(zhì)量之端到端集成測(cè)試》,本文關(guān)鍵詞  淺談,如何,提高,PHP,代碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談如何提高PHP代碼質(zhì)量之端到端集成測(cè)試》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺談如何提高PHP代碼質(zhì)量之端到端集成測(cè)試的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲国产精品精华液2区45| 久久综合九色综合97婷婷| 精品久久久久久久一区二区蜜臀| 国产精品欧美久久久久无广告| 麻豆精品新av中文字幕| 在线视频亚洲一区| 国产免费成人在线视频| 毛片av中文字幕一区二区| 首页欧美精品中文字幕| 91久久香蕉国产日韩欧美9色| 中文字幕一区av| 成人av在线资源网| 亚洲欧洲精品天堂一级| 99久久久久久| 亚洲欧美一区二区三区久本道91| 99在线视频精品| 亚洲免费观看高清在线观看| 99精品桃花视频在线观看| 亚洲免费色视频| 在线免费视频一区二区| 亚洲一区二区三区中文字幕| 欧美性色黄大片手机版| 日韩精品视频网站| 精品国产一区二区三区忘忧草 | 精品久久久三级丝袜| 精东粉嫩av免费一区二区三区| 欧美一区二区三区婷婷月色| 久久亚洲精华国产精华液 | 精品免费视频一区二区| 日日夜夜精品视频免费| 日韩欧美亚洲一区二区| 午夜av区久久| 久久久久久久久久看片| 亚洲综合丁香婷婷六月香| 91小视频在线观看| 天天影视色香欲综合网老头| 91麻豆精品国产91久久久使用方法| 亚洲一二三四区不卡| 欧美精品视频www在线观看| 另类中文字幕网| 亚洲视频一区二区免费在线观看 | 欧美精品1区2区3区| 国产一区二区0| 亚洲天堂中文字幕| 91成人在线观看喷潮| 午夜伦欧美伦电影理论片| 精品少妇一区二区三区日产乱码 | 亚洲免费观看高清完整版在线观看| 欧美在线观看一区| 中国色在线观看另类| 欧美日韩综合在线| 国产精品欧美久久久久一区二区| 欧美顶级少妇做爰| 91丨porny丨国产入口| 奇米精品一区二区三区四区| 色欧美片视频在线观看| 国产福利91精品一区二区三区| 日韩激情视频在线观看| 中文字幕精品一区二区精品绿巨人| 欧洲中文字幕精品| 国产福利不卡视频| 国产自产视频一区二区三区| 91视频免费看| 欧美日韩黄视频| 欧美激情艳妇裸体舞| 欧美精品精品一区| 99国产精品久久久久久久久久久| 丝袜美腿亚洲色图| 欧美日韩一区中文字幕| 亚洲一区电影777| 久久亚洲精精品中文字幕早川悠里 | 麻豆精品国产91久久久久久| 精品午夜久久福利影院| 日本久久电影网| 一区二区三区四区蜜桃| 成人在线一区二区三区| 欧美浪妇xxxx高跟鞋交| 99热这里都是精品| 婷婷综合另类小说色区| 91精品国产福利| 亚洲一区二区三区四区中文字幕| 成人深夜在线观看| 亚洲欧美一区二区三区国产精品| 日本韩国欧美国产| 依依成人精品视频| 91美女片黄在线| 欧美xxxx在线观看| 99re6这里只有精品视频在线观看| 久久综合色婷婷| 精品成人佐山爱一区二区| 6080国产精品一区二区| 精品日韩在线一区| 国产精品二三区| 天天av天天翘天天综合网| 中文久久乱码一区二区| 日韩一级完整毛片| 欧美不卡在线视频| 中文字幕亚洲成人| 欧美性受xxxx黑人xyx性爽| 一本色道综合亚洲| 欧美一区二区性放荡片| 久久久久亚洲蜜桃| 日韩精品一区国产麻豆| 中文字幕一区三区| 亚洲中国最大av网站| 亚洲另类春色校园小说| 国产日韩欧美精品综合| 亚洲国产精品一区二区久久恐怖片| 极品少妇一区二区| 成人av网站在线| 91影院在线免费观看| 蜜桃av一区二区| 福利一区二区在线观看| 91福利社在线观看| 欧美日韩一区国产| 日韩一级精品视频在线观看| 成人免费观看男女羞羞视频| 不卡影院免费观看| 91精品国产一区二区三区蜜臀| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲日本一区二区| 福利一区在线观看| 91精品久久久久久久91蜜桃| 日韩精品中午字幕| 欧美韩日一区二区三区| 亚洲美女淫视频| 国产精品一品二品| 日韩欧美一二三区| 伊人色综合久久天天| 成人在线综合网| 欧美一级艳片视频免费观看| 91精品午夜视频| 成人av影院在线| 国产精品久久久久久久午夜片| 久草中文综合在线| 欧美精品久久天天躁| 国产午夜精品一区二区三区嫩草 | 欧洲精品视频在线观看| 久久亚洲影视婷婷| 国产精品99久| 精品美女在线观看| 美女诱惑一区二区| 久久久久久久精| 97精品久久久午夜一区二区三区| 国产精品电影一区二区三区| 91在线国产福利| 亚洲成av人片一区二区| 欧美精品在欧美一区二区少妇| 一区二区三区高清| 欧美肥妇free| 国产在线视频不卡二| 538在线一区二区精品国产| 亚洲色欲色欲www| 在线电影一区二区三区| 亚洲高清免费观看| 欧美一区二区三区免费在线看| 开心九九激情九九欧美日韩精美视频电影 | 在线视频一区二区三区| 亚洲一区在线观看免费| 天堂av在线一区| 国产视频一区二区三区在线观看| 99精品欧美一区| 六月丁香婷婷久久| 中文av字幕一区| 91黄色在线观看| 精品一区二区精品| 亚洲欧美在线视频| 91麻豆精品国产综合久久久久久 | 91行情网站电视在线观看高清版| 亚洲精选一二三| 久久久久久免费| 欧美日韩aaaaa| 国产一区二区电影| 亚洲国产aⅴ天堂久久| 国产午夜亚洲精品午夜鲁丝片| 欧美日韩大陆在线| 激情五月播播久久久精品| 国产精品久久久久婷婷二区次| 欧美中文字幕一二三区视频| 成人综合在线观看| 日韩精品免费视频人成| 国产精品国产三级国产有无不卡| 色嗨嗨av一区二区三区| 国产大陆亚洲精品国产| 日本系列欧美系列| 中文字幕一区三区| 国产精品美女久久久久久久久久久| 精品国产乱码久久久久久1区2区| 色综合天天综合给合国产| 国产福利视频一区二区三区| 亚洲18影院在线观看| 国产婷婷色一区二区三区四区| 日韩一区二区中文字幕| av电影在线观看不卡 | 91精品国产综合久久久久久久久久 | 7777精品伊人久久久大香线蕉最新版| 亚洲三级电影网站| 97国产精品videossex| 日本sm残虐另类| 精品国产91久久久久久久妲己 |