摘要:所以,是幫助您創(chuàng)建您的項(xiàng)目的測(cè)試框架,單元測(cè)試。行為驅(qū)動(dòng)開發(fā)是一個(gè)來(lái)自測(cè)試驅(qū)動(dòng)開發(fā)的開發(fā)過(guò)程。這種語(yǔ)言被稱為,是用來(lái)描述被測(cè)試的預(yù)期的行為。代碼將被測(cè)試并且沒(méi)有異常。這些標(biāo)準(zhǔn)提出了現(xiàn)代編碼風(fēng)格。
本文來(lái)自medium----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050你需要開始使用測(cè)試
這是我每天對(duì)自己說(shuō)的話。像很多人一樣,我不會(huì)像TDD所建議的那樣測(cè)試我的代碼。我現(xiàn)在在使用測(cè)試,在過(guò)去的半年里一直這樣做,前面還有很長(zhǎng)的路要走。
我是在處理復(fù)雜的遺留項(xiàng)目時(shí)決定學(xué)習(xí)測(cè)試。代碼是如此的脆弱和僵硬,以至于一旦我們添加一些代碼就會(huì)破壞它。新的特征?實(shí)現(xiàn)和破壞某事!修復(fù)錯(cuò)誤?新建另一個(gè)。
這是一個(gè)大問(wèn)題,并讓我開始嘗試測(cè)試。
第一個(gè)工具是PHPUnit。如官方網(wǎng)站所述
PHPUnit是PHP的面向程序員的測(cè)試框架。這是單元測(cè)試框架xUnit架構(gòu)實(shí)例。
所以,PHPUnit是幫助您創(chuàng)建您的項(xiàng)目的測(cè)試框架,單元測(cè)試。它提供了幾個(gè)函數(shù)來(lái)測(cè)試代碼的結(jié)果,并生成與這些測(cè)試結(jié)果相同的良好輸出。
自從我開始思考測(cè)試、閱讀、和于人交談測(cè)試,我發(fā)現(xiàn)了另一個(gè)偉大的工具,它是對(duì)以前那些單元的測(cè)試工作的補(bǔ)充,它就是Behat,這是一個(gè)BDD的PHP框架。
BDD(行為驅(qū)動(dòng)開發(fā))是一個(gè)來(lái)自TDD(測(cè)試驅(qū)動(dòng)開發(fā))的開發(fā)過(guò)程。這些縮寫詞現(xiàn)在并不重要,重要的是你可以使用更自然的語(yǔ)言來(lái)說(shuō)明你的測(cè)試,這種語(yǔ)言對(duì)于非技術(shù)人員也可以理解它。
這種語(yǔ)言被稱為Gherkin,是用來(lái)描述被測(cè)試的預(yù)期的行為。使用Gherkin看起來(lái)像這樣
在這些描述背后,每當(dāng)描述于phpDoc中的指定的方法有正則模式匹配相應(yīng)的php代碼就會(huì)被調(diào)用,通過(guò)SDK、應(yīng)用程序或Web系統(tǒng),這些代碼實(shí)現(xiàn)了這些步驟,模擬真實(shí)的用戶將做的
使用Behat工作是如此順利。在一切正確配置之后,您開始編寫測(cè)試一個(gè)特性的所有可能場(chǎng)景。一旦你運(yùn)行behat,它給你所有你應(yīng)該添加到您的PHP環(huán)境類的方法模版以便實(shí)施場(chǎng)景的每一步
之后,您開始編寫每一步的實(shí)際代碼,并繼續(xù)重復(fù)這個(gè)循環(huán)。
實(shí)現(xiàn)一個(gè)步驟的php代碼
運(yùn)行測(cè)試
如果運(yùn)行正常,繼續(xù)實(shí)現(xiàn)下一步的php代碼
如果有異常,修復(fù)它
在經(jīng)歷一個(gè)半小時(shí)的配置和閱讀文檔后,你可以開始使用Behat,到最后你看到的都是php代碼然后你就已經(jīng)知道了怎么編寫它
持續(xù)集成持續(xù)集成(CI)是一個(gè)過(guò)程——一種做某事的方法,而這一點(diǎn)對(duì)于我們的軟件工程師來(lái)說(shuō),就是創(chuàng)造軟件。
簡(jiǎn)單地說(shuō),它是將小代碼塊(也許每天幾次)不斷的整合到代碼庫(kù)中的行為。代碼將被測(cè)試并且沒(méi)有異常。CI幫助您自動(dòng)化應(yīng)用程序的構(gòu)建、測(cè)試和部署。
通過(guò)幾次點(diǎn)擊,你可以通過(guò)Travis CI集成你的GitHub項(xiàng)目,每次推送到倉(cāng)庫(kù)后會(huì)運(yùn)行你以寫好的PHPUnit和Behat測(cè)試,這些測(cè)試告訴你最后實(shí)現(xiàn)的特點(diǎn)是否準(zhǔn)備好,是否要合并。除此之外,您還可以使用Travis CI將代碼部署到生產(chǎn)環(huán)境和暫存。
通過(guò)一個(gè)被良好規(guī)范的程序?qū)崿F(xiàn)一個(gè)良好的工作流程是極好的,Travis CI可以幫助你做這項(xiàng)工作。遵循這個(gè)好的開始,發(fā)現(xiàn)對(duì)軟件開發(fā)過(guò)程的思考是多么有趣,而不僅僅是代碼本身。
遵循PSR-1 和 PSR-2如果你以前不知道PSR是什么,那么現(xiàn)在你應(yīng)該去了解了。實(shí)際上PSR代表PHP Standard Recommendation(PHP規(guī)范推薦),PHP-FIG建議使用它們。PHP—FIG是一個(gè)成員來(lái)自最大的PHP項(xiàng)目、框架和CMS系統(tǒng)的一個(gè)組織,它致力于對(duì)語(yǔ)言的未來(lái)、生態(tài)系統(tǒng)的思考和討論應(yīng)被遵循的PHP規(guī)范
很長(zhǎng)一段時(shí)間以來(lái)PHP都沒(méi)有編碼風(fēng)格。我沒(méi)有那么老,但每次我看到別人的項(xiàng)目或庫(kù)時(shí),它們的風(fēng)格都不同。有時(shí)把括號(hào)放在一個(gè)位置,有時(shí)把它放在下一行,用不同的方法來(lái)處理長(zhǎng)長(zhǎng)的一行代碼,還有其他風(fēng)格和喜好的組合。真是一團(tuán)糟。
PHP—FIG做許多其他的工作,但提出一個(gè)統(tǒng)一的代碼,他們說(shuō):“讓我們停止操心代碼風(fēng)格,讓我們每個(gè)人都遵循同一個(gè)標(biāo)準(zhǔn),并開始思考創(chuàng)造偉大的軟件”?,F(xiàn)在,每當(dāng)你查看某人的代碼時(shí),你只會(huì)操心它是如何工作的,而不是研究格式、結(jié)構(gòu)。
在文章的最后,一共有9種被接受的PSRs為解決常見問(wèn)題的推薦解決方案。但如果你不知道這些標(biāo)準(zhǔn)的話,以PSR-1和psr-2作為起點(diǎn)。
這些標(biāo)準(zhǔn)提出了現(xiàn)代PHP編碼風(fēng)格。請(qǐng)務(wù)必在開始使用之前閱讀它們。不要認(rèn)為在編寫代碼時(shí)你會(huì)記住所有的代碼,這是一個(gè)過(guò)程,但為了讓你確定你使用的規(guī)范,有一些工具可以幫助你完成它。
PHP CodeSniffer是一種工具,你可以在Packagist上找到它,使用Composer安裝它。我不認(rèn)為這個(gè)庫(kù)名稱是最好的選擇,因?yàn)樗瑑煞N不同的工具,分別是phpcbf PHPCs。
Phpcs代碼嗅探器,它會(huì)掃描你的整個(gè)代碼,查找與配置的編碼標(biāo)準(zhǔn)不符的代碼部分。
您可以通過(guò)PHPCs使用多種編碼標(biāo)準(zhǔn)你甚至可以創(chuàng)建你自己的標(biāo)準(zhǔn)。在代碼掃描結(jié)束,PHPCs列出不遵循標(biāo)準(zhǔn)的代碼片段。真是太好用了。
現(xiàn)在,如何修改所有的錯(cuò)誤的代碼片段?你可以打開所有的文件,更改代碼,運(yùn)行PHPCs直到看到錯(cuò)誤不顯示出來(lái),并重復(fù)上述過(guò)程。這樣會(huì)很無(wú)聊。
為了解決這一問(wèn)題,PHPcodesniffer的一個(gè)稱為phpcbf的工具發(fā)揮作用了,或成為PHP代碼美化工具。它在不破壞你的代碼的前提下盡力修復(fù)所有的錯(cuò)誤使之符合相同的代碼規(guī)范。
試著養(yǎng)成習(xí)慣,在push你的代碼到你的倉(cāng)庫(kù)之前使用phpcs和phpcbf檢查代碼,這將保證你所寫的代碼都符合規(guī)范,一旦有人喜歡你的項(xiàng)目并想貢獻(xiàn)時(shí),他們閱讀起代碼來(lái)毫無(wú)問(wèn)題。
框架我不想花太多的時(shí)間討論框架,下面有一個(gè)好的框架,各有優(yōu)缺點(diǎn),就我而言,我不喜歡使用這些封裝來(lái)所有東西的大框架。我喜歡需要什么就使用什么。
如果你需要一個(gè)HTTP 客戶端,比如Guzzle。如果你需要你個(gè)模版引擎比如Twig。如果你需要一個(gè)路由器。找到適合你的組建并使用他們,將他們組合起來(lái)構(gòu)建你自己的應(yīng)用。
Symfony為這個(gè)概念做了很多,你可以使用這整個(gè)框架作為一個(gè)項(xiàng)目,也可以像上面所述使用任何你需要的組建。
然而,每當(dāng)我需要使用框架來(lái)寫應(yīng)用,我通常會(huì)選擇微型框架。它們真的很小,近提供最基礎(chǔ)的組件,并且十分的容易定制。
我的微型框架選擇是Slimframework,我認(rèn)為大家都應(yīng)該去試試它。
順便提一下,對(duì)于剛學(xué)編程的人來(lái)說(shuō),我真的建議在采用框架和使用前,你應(yīng)該試著建立一個(gè)你自己的框架。這將讓你對(duì)這整個(gè)的工作機(jī)制有個(gè)整體的了解。并讓你在以后采用大型框架時(shí)更容易理解。
現(xiàn)代PHP工具讓我們以一組鏈接表來(lái)結(jié)束這篇文章,對(duì)于我來(lái)說(shuō),這些組件和工具和庫(kù)就代表來(lái)現(xiàn)代PHP的偉大思想:
Slimframework:一個(gè)既好又酷的微型框架
Symfony : 一個(gè)擁有偉大和可復(fù)用組件的大一點(diǎn)的框架
Guzzle : 一個(gè)簡(jiǎn)單和好用HTTP客戶端
Behat : 一個(gè)行為驅(qū)動(dòng)開發(fā)框架
PHPCS/CBF : 代碼檢查和美化
Faker : 虛擬數(shù)據(jù)生成器
Psysh:充滿極好的功能的即時(shí)開發(fā)控制臺(tái)
Composer : 依賴管理和其他的一些有用的特色
Packagist : 第三方庫(kù)倉(cāng)庫(kù)
Twig : 模版引擎
我知道這個(gè)標(biāo)題確實(shí)很自負(fù),在這里我真正想說(shuō)的是PHP正在進(jìn)步,它的生態(tài)系統(tǒng)同樣也在進(jìn)步(可能更快)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28601.html
摘要:這大概是我沒(méi)有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個(gè)的框架。行為驅(qū)動(dòng)開發(fā)是來(lái)自測(cè)試驅(qū)動(dòng)開發(fā)的開發(fā)過(guò)程。簡(jiǎn)單的說(shuō),它就是經(jīng)??赡芤惶鞄状螌⑿K代碼整合進(jìn)基礎(chǔ)代碼當(dāng)中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請(qǐng)點(diǎn)擊?協(xié)同翻譯介紹?。 文章...
摘要:到現(xiàn)在為止還挺好堆棧中與客戶在任何級(jí)別進(jìn)行交互的每個(gè)產(chǎn)品都在生成數(shù)據(jù)。隨著這些產(chǎn)品的碎片化,數(shù)據(jù)碎片將導(dǎo)致大量未開發(fā)的數(shù)據(jù)。的堆棧在第三階段發(fā)射后年事情進(jìn)展順利,你的公司正在擴(kuò)展,以及你的團(tuán)隊(duì)的運(yùn)營(yíng)。SaaS產(chǎn)品代表了當(dāng)今B2B技術(shù)的重要組成部分。能夠理解面向消費(fèi)者的新技術(shù)的影響比以往任何時(shí)候都更加重要。這也給那些沒(méi)有直接參與軟件的人帶來(lái)了許多新的挑戰(zhàn)。這篇文章是初創(chuàng)公司如何使用Modern...
摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。 一個(gè)神奇的文件:Dockerfile 我不知道有多少同學(xué)...
摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。 一個(gè)神奇的文件:Dockerfile 我不知道有多少同學(xué)...
摘要:最適合入門的初級(jí)教程四路由可以分發(fā)請(qǐng)求路由中還可以引入頁(yè)面我們可以在中搞定一切了但是如果把業(yè)務(wù)邏輯都寫入到路由中那路由將龐大的難以維護(hù)于是控制器就有了很明顯的存在價(jià)值把業(yè)務(wù)邏輯寫在控制器中路由只負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求到指定的控制器即可那我們開始創(chuàng)建控 最適合入門的Laravel初級(jí)教程(四) 路由可以分發(fā)請(qǐng)求; 路由中還可以引入 html 頁(yè)面;我們可以在 route/web.php 中搞定一切...
閱讀 2675·2021-11-11 16:55
閱讀 718·2021-09-04 16:40
閱讀 3109·2019-08-30 15:54
閱讀 2649·2019-08-30 15:54
閱讀 2444·2019-08-30 15:46
閱讀 431·2019-08-30 15:43
閱讀 3252·2019-08-30 11:11
閱讀 3007·2019-08-28 18:17