最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年05月28日 15:15:53   作者:八重櫻  
在本系列的前幾部分中,我們建立了一個構建工具,一些靜態(tài)代碼分析器,并開始編寫單元測試。為了使我們的測試堆棧更完整,有一些測試可以檢查你的代碼是否在真實環(huán)境中運行,以及它是否能在更復雜的業(yè)務場景中運行良好。

概述

在這里,我們可以使用為行為驅動開發(fā)構建的工具——官方 PHP 的 Cucumber 實現(xiàn)——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 的測試創(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

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

你可以通過運行 ./bin/behat-init 來生成它的代碼模板。它應該會創(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 運行所有的測試。你應該得到以下結果:

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 準備了一份很好的報告,說明我們的應用程序做了什么,結果是什么。下一次,當項目經(jīng)理詢問你在測試中涉及到哪些場景時,你可以給他一個 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 控制器運行你的測試步驟。你還可以創(chuàng)建“domain”上下文,它將只使用 PHP API 調(diào)用來運行你的業(yè)務邏輯。通過這種方式,你可以單獨地測試業(yè)務邏輯集成,從端到端應用程序測試。

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

3、如何使用Behat 

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

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

總結

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

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

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

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

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

相關文章

  • php eval函數(shù)用法 PHP中eval()函數(shù)小技巧

    php eval函數(shù)用法 PHP中eval()函數(shù)小技巧

    本函式可將字符串之中的變量值代入,通常用在處理數(shù)據(jù)庫的數(shù)據(jù)上
    2012-10-10
  • PHP中header用法小結

    PHP中header用法小結

    這篇文章主要介紹了PHP中header用法,總結分析了header函數(shù)的基本功能與相應的使用技巧,需要的朋友可以參考下
    2016-05-05
  • php中取得文件的后綴名?

    php中取得文件的后綴名?

    今天給學員講課,關于數(shù)組的應用舉例,說了怎樣取得一個文件的后綴名,總結一下,方法挺多的,下面分享給大家
    2012-02-02
  • PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】

    PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】

    這篇文章主要介紹了PHP 數(shù)組操作,結合實例形式詳細分析了PHP數(shù)組遍歷、指針、數(shù)組常用函數(shù)等相關原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-05-05
  • PHP中使用BigMap實例

    PHP中使用BigMap實例

    這篇文章主要介紹了PHP中使用BigMap實例,本文直接給出實現(xiàn)代碼,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-03-03
  • PHP 模擬登陸功能實例詳解

    PHP 模擬登陸功能實例詳解

    這篇文章主要介紹了PHP 模擬登陸功能,結合實例形式詳細分析了php基于curl的模擬表單登陸及session信息存儲相關操作技巧,需要的朋友可以參考下
    2019-09-09
  • PHP實現(xiàn)AES256加密算法實例

    PHP實現(xiàn)AES256加密算法實例

    這篇文章主要介紹了PHP實現(xiàn)AES256加密算法,包括了對應的類文件及演示demo實例,并附帶另一個PHP mcrypt加密實例供大家參考借鑒,需要的朋友可以參考下
    2014-09-09
  • div li的多行多列 無刷新分頁示例代碼

    div li的多行多列 無刷新分頁示例代碼

    翻頁文件一次加載了全部的內(nèi)容,因而不是很適合大型的網(wǎng)站,而適用于數(shù)據(jù)比較少的情況,下面有個不錯的示例,感興趣的朋友可以參考下
    2013-10-10
  • php中mail函數(shù)發(fā)送郵件失敗的解決方法

    php中mail函數(shù)發(fā)送郵件失敗的解決方法

    這篇文章主要介紹了php中mail函數(shù)發(fā)送郵件失敗的解決方法,涉及針對Linux運行平臺相關組件的配置技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • php支付寶接口用法分析

    php支付寶接口用法分析

    這篇文章主要介紹了php支付寶接口用法,以實例形式較為詳細的分析了php支付寶接口的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01

最新評論

马鞍山市| 青田县| 大洼县| 定南县| 九寨沟县| 新源县| 桦川县| 娱乐| 道孚县| 大足县| 兴化市| 宝鸡市| 浮梁县| 南靖县| 祁连县| 勐海县| 伊金霍洛旗| 洛浦县| 磴口县| 崇仁县| 甘孜县| 临湘市| 辛集市| 房产| 上栗县| 丹阳市| 原阳县| 苍梧县| 麻江县| 汨罗市| 杭锦旗| 微博| 南郑县| 德保县| 海晏县| 莆田市| 丹巴县| 赤城县| 诸暨市| 万全县| 清流县|