电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-09-07 09:37:29
目錄概述1、測試的結構2、上下文3、如何使用Behat 總結概述

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

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

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

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

然后,你應該為文件 features/price.feature 的測試創建一個規范。

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

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

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

//features/bootstrap/FeatureContext.php use BehatBehatContextSnippetAcceptingContext;use BehatGherkinNodePyStringNode;use BehatGherkinNodeTableNode;class FeatureContext implements SnippetAcceptingContext{/** * Initializes context. */ public function __construct() { }}

然后你可以執行:

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

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

// features/bootstrap/FeatureContext.php<?phpuse BehatBehatContextContext;use DomainPrice;use DomainPriceComparator;use InfrastructureNBPPriceConverter;/*** 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 運行所有的測試。你應該得到以下結果:

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

1、測試的結構

每個測試都包括:

對該場景的一些準備,用“Given”部分表示 “When”部分所涵蓋的一些動作 一些檢查被標記為“Then”部分

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

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 上下文編寫代碼,它將使用你的應用程序 HTTP 控制器運行你的測試步驟。你還可以創建“domain”上下文,它將只使用 PHP API 調用來運行你的業務邏輯。通過這種方式,你可以單獨地測試業務邏輯集成,從端到端應用程序測試。

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

3、如何使用Behat 

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

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

總結

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

PHing 用于運行你的構建 PHPCS 用于自動檢查代碼格式 PHPCPD 用于檢測重復代碼的 Phan 用于高級靜態代碼分析 PHPSpec 用于單元測試 Behat 用于端到端和集成測試

現在,你可以向 git 提交鉤子添加 ./bin/phing,并設置持續集成來運行每個提交的測試。

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

以上就是淺談如何提高PHP代碼質量之端到端集成測試的詳細內容,更多關于如何提高PHP代碼質量之端到端集成測試的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 空压机商城|空气压缩机|空压机配件-压缩机网旗下商城 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 北京公寓出租网-北京酒店式公寓出租平台 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 |